この記事では主に、非再帰アルゴリズムに基づいてバイナリ ツリーに事前順序、順序内、および順序後のトラバーサル操作を実装するための 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); // 压入左子树 } }
順番: 下から上にトラバースする必要があるため、最初に左側のサブツリーがスタックにプッシュされ、次にルート ノードと右側のサブツリーが 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 を使用してバイナリ ツリーが対称かどうかを判断する方法
以上がPHP は、プリオーダー、インオーダー、ポストオーダーのトラバーサル バイナリ ツリー操作の例を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。