相關(guān)關(guān)鍵詞
關(guān)于我們
最新文章
- PHP中opcode緩存簡單用法分析
- thinkPHP控制器變量在模板中的顯示方法示例
- PHP move_uploaded_file() 函數(shù)(將上傳的文件移動到新位置)
- dirname(__FILE__)的含義和應(yīng)用說明
- thinkPHP5框架實(shí)現(xiàn)分頁查詢功能的方法示例
- PHP中單雙號與變量
- PHP獲得當(dāng)日零點(diǎn)時間戳的方法分析
- Laravel ORM對Model::find方法進(jìn)行緩存示例詳解
- PHP讀寫文件高并發(fā)處理操作實(shí)例詳解
- 【CLI】利用Curl下載文件實(shí)時進(jìn)度條顯示的實(shí)現(xiàn)
php實(shí)現(xiàn)的二叉樹遍歷算法示例

本文實(shí)例講述了php實(shí)現(xiàn)的二叉樹遍歷算法。分享給大家供大家參考,具體如下:
今天使用php來實(shí)現(xiàn)二叉樹的遍歷
創(chuàng)建的二叉樹如下圖所示
php代碼如下所示:
<?php class Node { public $value; public $child_left; public $child_right; } final class Ergodic { //前序遍歷:先訪問根節(jié)點(diǎn),再遍歷左子樹,最后遍歷右子樹;并且在遍歷左右子樹時,仍需先遍歷根節(jié)點(diǎ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); } } //中序遍歷:先遍歷左子樹、然后訪問根節(jié)點(diǎ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; } } //后序遍歷:先遍歷左子樹,然后遍歷右子樹,最后訪問根節(jié)點(diǎ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