首頁  >  文章  >  後端開發  >  PHP實作先序、中序及後序遍歷二元樹操作實例

PHP實作先序、中序及後序遍歷二元樹操作實例

小云云
小云云原創
2018-01-16 13:34:122124瀏覽

本文主要介紹了PHP基於非遞歸演算法實現先序、中序及後序遍歷二元樹操作,結合實例形式分析了php採用非遞歸演算法對二元樹進行先序、中序及後序遍歷操作的原理與具體實現技巧,需要的朋友可以參考下,希望能幫助大家。

概述:

二元樹遍歷原理如下:

#針對上圖所示二元樹遍歷:

##1.前序遍歷:先遍歷根結點,然後遍歷左子樹,最後遍歷右子樹。

ABDHECFG

2.中序遍歷:先遍歷左子樹,再遍歷根結點,最後遍歷右子樹。

HDBEAFCG

3.後序遍歷:先遍歷左子樹,然後遍歷右子樹,最後遍歷根節點。

HDEBFGCA

實作方法:

先序遍歷:利用堆疊先進後出的特性,先訪問根節點,再把右子樹壓入,再壓入左子樹。這樣取出的時候是先取出左子樹,最後再取出右子樹。


function preorder($root){
 $stack = array();
 array_push($stack, $root);
 while(!empty($stack)){
  $center_node = array_pop($stack);
  echo $center_node->value; // 根节点
  if($center_node->right != null)
   array_push($stack, $center_node->right); // 压入右子树
  if($center_node->left != null)
   array_push($stack, $center_node->left); // 压入左子树
 }
}


中序:需要從下方往上遍歷,所以先把左子樹壓入棧,然後逐一存取根節點和右子樹。


function inorder($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->left;
  }
  $center_node = array_pop($stack);
  echo $center_node->value;
  $center_node = $center_node->right;
 }
}


後序:先把根節點存起來,然後依序儲存左子樹和右子樹。然後輸出。


function tailorder($root){
 $stack = array();
 $outstack = array();
 array_push($$stack, $root);
 while($empty($stack)){
  $center_node = array_pop($stack);
  array_push($outstack, $center_node);
  if($center_node->right != null)
   array_push($stack, $center_node->right);
  if($center_node->left != null)
   array_push($stack, $center_node->left);
 }
 while($empty($outstack)){
  $center_node = array_pop($outstack);
  echo $center_node->value;
 }
}
相關推薦:

PHP如何實作判斷二元樹是否對稱

JavaScript實作二元樹的先序、中序及後序遍歷方法

php實作的二元樹遍歷演算法範例程式碼詳解

以上是PHP實作先序、中序及後序遍歷二元樹操作實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn