本文實(shí)例講述了php實(shí)現(xiàn)的二叉樹(shù)遍歷算法。分享給大家供大家參考,具體如下:
今天使用php來(lái)實(shí)現(xiàn)二叉樹(shù)的遍歷
創(chuàng)建的二叉樹(shù)如下圖所示
php代碼如下所示:
<?phphtml' target='_blank'>class Node { public $value; public $child_left; public $child_right;}final class Ergodic { //前序遍歷:先訪問(wèn)根節(jié)點(diǎn),再遍歷左子樹(shù),最后遍歷右子樹(shù);并且在遍歷左右子樹(shù)時(shí),仍需先遍歷根節(jié)點(diǎn),然后訪問(wèn)左子樹(shù),最后遍歷右子樹(shù) public static function preOrder($root){ $stack = array(); array_push($stack, $root); while(!empty($stack)){ $center_node = array_pop($stack); echo $center_node->value . ' '; //先把右子樹(shù)節(jié)點(diǎn)入棧,以確保左子樹(shù)節(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); } } //中序遍歷:先遍歷左子樹(shù)、然后訪問(wèn)根節(jié)點(diǎn),最后遍歷右子樹(shù);并且在遍歷左右子樹(shù)的時(shí)候。仍然是先遍歷左子樹(shù),然后訪問(wèn)根節(jié)點(diǎn),最后遍歷右子樹(shù) 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; } } //后序遍歷:先遍歷左子樹(shù),然后遍歷右子樹(shù),最后訪問(wèn)根節(jié)點(diǎn);同樣,在遍歷左右子樹(shù)的時(shí)候同樣要先遍歷左子樹(shù),然后遍歷右子樹(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); //左子樹(shù)節(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)建二叉樹(shù)$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 Fecho '<br/>';//中序遍歷Ergodic::midOrder($a); //結(jié)果是: H D I B G A E C Fecho '<br/>';//后序遍歷Ergodic::endOrder($a); //結(jié)果是: H I D G B E F C A
以上就是php實(shí)現(xiàn)二叉樹(shù)遍歷算法演示的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選