<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人