ホームページ > バックエンド開発 > PHPチュートリアル > 二分木の順序走査を解く方法

二分木の順序走査を解く方法

WBOY
リリース: 2016-06-13 12:57:29
オリジナル
1116 人が閲覧しました

バイナリ ツリーの順序トラバーサル
バイナリ ツリーの構造が次のとおりであると仮定します。配列添字 0 がルート ノード、1 が左の子ノード、2 が右の子ノードです。事前順序走査を実装しました。このバイナリ ツリーを順番に走査できるようにしたいと考えています。皆さんが私に良い方法を教えてくれることを願っています。

<br />
//二叉树结构<br />
	$array=array("-",array("+",array("a"),array("*",array("b"),array("-",array("c"),array("d")))),array("/",array("e"),array("f")));<br />
	echo "<pre class="brush:php;toolbar:false">";<br />
	print_r($array);<br />
	echo "
";
//前序遍历代码
function bianli($array){
foreach($array as $value){
if(is_array($value)){
bianli($value);
}else{
echo $value;
}
}
}
echo bianli($array);
ログイン後にコピー

PS (英語の学術論文をダウンロードできる別の Web サイトを探しています。英語の翻訳に使用する必要があります。Google Scholar で見つけた PDF バージョンは非常に不明確です。他にダウンロードできる Web サイトがあるかどうかはわかりません。お勧めいただければ幸いです)


-----解決策--------------------------------
指定したバイナリ ツリーは厳密ではありません。各ノードは添字配列ではなく連想配列で表す必要があります
幸いなことに、あなたのツリーはいっぱいです。そうでないと誤解を招きやすいです
各ノードの添字は
を表します。 0 ルート 1 左の子 2 右の子
バイナリ ツリー トラバーサルの定義は
/* 前序遍历 */<br />
function DLR($F) {<br />
  if(isset($F[0])) echo $F[0];<br />
  if(isset($F[1])) DLR($F[1]);<br />
  if(isset($F[2])) DLR($F[2]);<br />
}<br />
/* 中序遍历 */<br />
function LDR($F) {<br />
  if(isset($F[1])) LDR($F[1]);<br />
  if(isset($F[0])) echo $F[0];<br />
  if(isset($F[2])) LDR($F[2]);<br />
}<br />
/* 后序遍历 */<br />
function LRD($F) {<br />
  if(isset($F[1])) LRD($F[1]);<br />
  if(isset($F[2])) LRD($F[2]);<br />
  if(isset($F[0])) echo $F[0];<br />
}<br />
ログイン後にコピー

です。 前文 -+a*b-cd/ef
中位 a+b*c-d-e/f
ポストシーケンス abcd-*+ef/-

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート