二叉樹的中序遍曆
假設二叉樹的結構如下面的數組,數組下標0為根節點,1為左孩子節點,2為右孩子節點。前序走訪我已經實現,現在我希望能夠中序遍曆這個二叉樹,希望大家給出好的方法。
//二叉樹結構
$array=array("-",array("+",array("a"),array("*",array("b"),array("-",array("c"),array("d")))),array("/",array("e"),array("f")));
echo "";
print_r($array);
echo "
";
//前序走訪代碼
function bianli($array){
foreach($array as $value){
if(is_array($value)){
bianli($value);
}else{
echo $value;
}
}
}
echo bianli($array);
PS(另求一個能下載英文學術論文的網站,畢設英文翻譯需要用到,我從Google學術上面找的PDF版很不清晰,不知道有沒有其他網站可以下載,希望大家能夠推薦)
------解決方案--------------------
你給出的二叉樹表示的不嚴密,每個節點宜用關聯陣列而不是下標數組表示
好在你的樹是滿的,不然極易產生誤解
你的每個節點的下標分別表示
0 根 1 左孩子 2 右孩子
由二叉樹遍曆的定義,有
/* 前序走訪 */
function DLR($F) {
if(isset($F[0])) echo $F[0];
if(isset($F[1])) DLR($F[1]);
if(isset($F[2])) DLR($F[2]);
}
/* 中序遍曆 */
function LDR($F) {
if(isset($F[1])) LDR($F[1]);
if(isset($F[0])) echo $F[0];
if(isset($F[2])) LDR($F[2]);
}
/* 後序遍曆 */
function LRD($F) {
if(isset($F[1])) LRD($F[1]);
if(isset($F[2])) LRD($F[2]);
if(isset($F[0])) echo $F[0];
}
前序 -+a*b-cd/ef
中序 a+b*c-d-e/f
後序 abcd-*+ef/-