<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            php如何實現的二叉樹遍歷(示例)

            時間:2025-02-07 16:02:29 php語言 我要投稿
            • 相關推薦

            php如何實現的二叉樹遍歷(示例)

              本文主要介紹了php實現的二叉樹遍歷算法,結合具體實例形式分析了php針對二叉樹的常用前序、中序及后序遍歷算法實現技巧,需要的朋友可以參考一下!想了解更多相關信息請持續關注我們應屆畢業生考試網!

              創建的二叉樹如下圖所示

              php代碼如下所示:

              <?php

              class Node {

              public $value;

              public $child_left;

              public $child_right;

              }

              final class Ergodic {

              //前序遍歷:先訪問根節點,再遍歷左子樹,最后遍歷右子樹;并且在遍歷左右子樹時,仍需先遍歷根節點,然后訪問左子樹,最后遍歷右子樹

              public static function preOrder($root){

              $stack = array();

              array_push($stack, $root);

              while(!empty($stack)){

              $center_node = array_pop($stack);

              echo $center_node->value . ' ';

              //先把右子樹節點入棧,以確保左子樹節點先出棧

              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);

              }

              }

              //中序遍歷:先遍歷左子樹、然后訪問根節點,最后遍歷右子樹;并且在遍歷左右子樹的時候。仍然是先遍歷左子樹,然后訪問根節點,最后遍歷右子樹

              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;

              }

              }

              //后序遍歷:先遍歷左子樹,然后遍歷右子樹,最后訪問根節點;同樣,在遍歷左右子樹的時候同樣要先遍歷左子樹,然后遍歷右子樹,最后訪問根節點

              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);

              //左子樹節點先入$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 . ' ';

              }

              }

              }

              //創建二叉樹

              $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); //結果是:A B D H I G C E F

              echo '<br/>';

              //中序遍歷

              Ergodic::midOrder($a); //結果是: H D I B G A E C F

              echo '<br/>';

              //后序遍歷

              Ergodic::endOrder($a); //結果是: H I D G B E F C A


            【php如何實現的二叉樹遍歷(示例)】相關文章:

            PHP使用遞歸算法無限遍歷數組示例05-20

            關于php中hashtable實現示例08-02

            PHP中多態如何實現09-04

            php如何實現快速排序09-18

            如何用PHP實現找回密碼11-11

            php如何實現驗證碼06-13

            PHP弱類型變量是如何實現的05-31

            如何實現PHP圖片裁剪與縮放07-13

            PHP中如何實現crontab代碼05-30

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院