<?php
class Node {
public $value;
public $child_left;
public $child_right;
}
final class Ergodic {
//前序遍歷:先訪問(wèn)根節(jié)點(diǎn)沫屡,再遍歷左子樹疙剑,最后遍歷右子樹搂鲫;并且在遍歷左右子樹時(shí)平绩,仍需先遍歷根節(jié)點(diǎn),然后訪問(wèn)左子樹尔破,最后遍歷右子樹
public static function preOrder($root){
$stack = array();
array_push($stack, $root);
while(!empty($stack)){
$center_node = array_pop($stack);
echo $center_node->value . ' ';
//先把右子樹節(jié)點(diǎn)入棧航夺,以確保左子樹節(jié)點(diǎn)先出棧
if($center_node->child_right != null) array_push($stack, $center_node->child_right);
if($center_node->child_left != null) array_push($stack, $center_node->child_left);
}
}
//中序遍歷:先遍歷左子樹划提、然后訪問(wèn)根節(jié)點(diǎn),最后遍歷右子樹;并且在遍歷左右子樹的時(shí)候洽腺。仍然是先遍歷左子樹脚粟,然后訪問(wèn)根節(jié)點(diǎn),最后遍歷右子樹
public static function midOrder($root){
$stack = array();
$center_node = $root;
while (!empty($stack) || $center_node != null) {
while ($center_node != null) {
array_push($stack, $center_node);
$center_node = $center_node->child_left;
}
$center_node = array_pop($stack);
echo $center_node->value . ' ';
$center_node = $center_node->child_right;
}
}
//后序遍歷:先遍歷左子樹蘸朋,然后遍歷右子樹核无,最后訪問(wèn)根節(jié)點(diǎn);同樣藕坯,在遍歷左右子樹的時(shí)候同樣要先遍歷左子樹团南,然后遍歷右子樹,最后訪問(wèn)根節(jié)點(diǎn)
public static function endOrder($root){
$push_stack = array();
$visit_stack = array();
array_push($push_stack, $root);
while (!empty($push_stack)) {
$center_node = array_pop($push_stack);
array_push($visit_stack, $center_node);
//左子樹節(jié)點(diǎn)先入$pushstack的棧炼彪,確保在$visitstack中先出棧
if ($center_node->child_left != null) array_push($push_stack, $center_node->child_left);
if ($center_node->child_right != null) array_push($push_stack, $center_node->child_right);
}
while (!empty($visit_stack)) {
$center_node = array_pop($visit_stack);
echo $center_node->value . ' ';
}
}
}
//創(chuàng)建二叉樹
$a = new Node();
$b = new Node();
$c = new Node();
$d = new Node();
$e = new Node();
$f = new Node();
$g = new Node();
$h = new Node();
$i = new Node();
$a->value = 'A';
$b->value = 'B';
$c->value = 'C';
$d->value = 'D';
$e->value = 'E';
$f->value = 'F';
$g->value = 'G';
$h->value = 'H';
$i->value = 'I';
$a->child_left = $b;
$a->child_right = $c;
$b->child_left = $d;
$b->child_right = $g;
$c->child_left = $e;
$c->child_right = $f;
$d->child_left = $h;
$d->child_right = $i;
//前序遍歷
Ergodic::preOrder($a); //結(jié)果是:A B D H I G C E F
echo '<br/>';
//中序遍歷
Ergodic::midOrder($a); //結(jié)果是: H D I B G A E C F
echo '<br/>';
//后序遍歷
Ergodic::endOrder($a); //結(jié)果是: H I D G B E F C A
二叉樹前序中序后序遍歷代碼例子
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門赌厅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人轿塔,你說(shuō)我怎么就攤上這事特愿。” “怎么了勾缭?”我有些...
- 文/不壞的土叔 我叫張陵揍障,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我俩由,道長(zhǎng)毒嫡,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任幻梯,我火速辦了婚禮兜畸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碘梢。我一直安慰自己咬摇,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布煞躬。 她就那樣靜靜地躺著肛鹏,像睡著了一般逸邦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上在扰,一...
- 那天缕减,我揣著相機(jī)與錄音,去河邊找鬼健田。 笑死烛卧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妓局。 我是一名探鬼主播总放,決...
- 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼好爬!你這毒婦竟也來(lái)了局雄?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤存炮,失蹤者是張志新(化名)和其女友劉穎炬搭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穆桂,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡宫盔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了享完。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灼芭。...
- 正文 年R本政府宣布寄悯,位于F島的核電站,受9級(jí)特大地震影響堕义,放射性物質(zhì)發(fā)生泄漏猜旬。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一倦卖、第九天 我趴在偏房一處隱蔽的房頂上張望洒擦。 院中可真熱鬧,春花似錦糖耸、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春舍扰,著一層夾襖步出監(jiān)牢的瞬間倦蚪,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓个束,卻偏偏與公主長(zhǎng)得像慕购,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茬底,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 在前文數(shù)據(jù)結(jié)構(gòu):二叉樹的原理及java實(shí)現(xiàn)中最爬,我們已經(jīng)了解了二叉樹的原理及二叉樹的三種遍歷方式涉馁,假設(shè)父節(jié)點(diǎn)是N,左...
- 題意:給出二叉樹的前序遍歷和中序遍歷,求后序遍歷蒜鸡。 NO.1:無(wú)需重建二叉樹胯努,可直接求出后序遍歷結(jié)果。 NO.2 ...
- 今天局嘁,是身體管理的第一天打卡溉箕。 在今天,最大的覺(jué)察就是自己開始有意識(shí)的吃食物了悦昵。 而且群里和小伙伴一起打卡是很開心...
- 前言上一篇文章中肴茄,我們介紹了為什么要關(guān)注數(shù)據(jù),在本文中我將分享具體如何做但指。 關(guān)注宏觀和細(xì)節(jié) 大多數(shù)人都能做到關(guān)注宏...