二叉樹前序中序后序遍歷代碼例子

二叉樹圖
<?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)系作者
  • 序言:七十年代末吐根,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辐马,更是在濱河造成了極大的恐慌拷橘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齐疙,死亡現(xiàn)場(chǎng)離奇詭異膜楷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)贞奋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門赌厅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人轿塔,你說(shuō)我怎么就攤上這事特愿。” “怎么了勾缭?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵揍障,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我俩由,道長(zhǎng)毒嫡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任幻梯,我火速辦了婚禮兜畸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碘梢。我一直安慰自己咬摇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布煞躬。 她就那樣靜靜地躺著肛鹏,像睡著了一般逸邦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上在扰,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天缕减,我揣著相機(jī)與錄音,去河邊找鬼健田。 笑死烛卧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妓局。 我是一名探鬼主播总放,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼好爬!你這毒婦竟也來(lái)了局雄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤存炮,失蹤者是張志新(化名)和其女友劉穎炬搭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穆桂,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宫盔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了享完。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灼芭。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖般又,靈堂內(nèi)的尸體忽然破棺而出彼绷,到底是詐尸還是另有隱情,我是刑警寧澤茴迁,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布寄悯,位于F島的核電站,受9級(jí)特大地震影響堕义,放射性物質(zhì)發(fā)生泄漏猜旬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一倦卖、第九天 我趴在偏房一處隱蔽的房頂上張望洒擦。 院中可真熱鬧,春花似錦糖耸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春舍扰,著一層夾襖步出監(jiān)牢的瞬間倦蚪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工边苹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陵且,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓个束,卻偏偏與公主長(zhǎng)得像慕购,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茬底,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容