ホームページ  >  記事  >  バックエンド開発  >  非再帰アルゴリズムに基づいて、事前順序、順序内、および順序後のトラバーサル バイナリ ツリー操作を実装する PHP の例

非再帰アルゴリズムに基づいて、事前順序、順序内、および順序後のトラバーサル バイナリ ツリー操作を実装する PHP の例

jacklove
jackloveオリジナル
2018-06-30 18:03:052770ブラウズ

この記事では、主に、非再帰アルゴリズムに基づいたバイナリ ツリーに対する PHP の事前順序、順序内、および事後のトラバーサル操作の実装について紹介します。例に基づいたバイナリ ツリーの順序および事後トラバーサル操作原理と具体的な実装テクニックについては、必要な方は次のリンクを参照してください。

この記事の例では、PHP がどのように事前順序を実装するかを説明しています。非再帰アルゴリズムに基づく順序および事後トラバーサル バイナリ ツリー操作。参考のために皆さんと共有してください。詳細は次のとおりです。

概要:

バイナリ ツリー トラバーサルの原理は次のとおりです。

上図に示すバイナリ ツリー トラバーサルの場合:

1. 事前順序トラバーサル: 最初にルート ノードをトラバースします。 、次に左側のサブツリーをトラバースし、最後に右側のサブツリーをトラバースします。

ABDHECFG

2. 順序どおりの走査: 最初に左側のサブツリーを走査し、次にルート ノードを走査し、最後に右側のサブツリーを走査します。

HDBEAFCG

3. 事後走査: 最初に左側のサブツリーを走査し、次に右側のサブツリーを走査し、最後にルート ノードを走査します。

HDEBFGCA

実装方法:

#プリオーダー トラバーサル: スタックを最初から最後に使用するout 機能: 最初にルート ノードにアクセスし、次に右のサブツリーをプッシュし、次に左のサブツリーをプッシュします。このように取り出す場合、最初に左側の部分木が取り出され、最後に右側の部分木が取り出される。

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); // 压入左子树
 }
}

順番: 下から上にトラバースする必要があるため、最初に左側のサブツリーをスタックにプッシュしてから、ルート ノードと右サブツリーのノードに 1 つずつアクセスします。

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 は 2 つのスタックを使用してキュー関数を実装しますメソッドの説明

PHP のシリアル化と逆シリアル化の原理の詳細な説明

Swoole に基づく WeChat コード スキャンの説明ログイン機能のコードを実装するプロセス

#

以上が非再帰アルゴリズムに基づいて、事前順序、順序内、および順序後のトラバーサル バイナリ ツリー操作を実装する PHP の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。