tree.php
<?php
require_once "./zhan.php";
class binnode }
//封裝自己資料型別
class mydata
}class two****tree
//求樹的高度
public function gao($root,&$height)
$lheight = $this->gao($root->lchild,$height);
$rheight = $this->gao($root->rchild,$height);
$height = $lheight>$rheight?$lheight+1:$rheight+1;
return $height;
} //先序
public function xianxu($root)
echo $root->ch." ";
$this->xianxu($root->lchild);
$this->xianxu($root->rchild);
} //中序
public function zhongxu($root)
$this->zhongxu($root->lchild);
echo $root->ch." ";
$this->zhongxu($root->rchild);
} //後序
public function houxu($root)
$this->houxu($root->lchild);
$this->houxu($root->rchild);
echo $root->ch." ";
} //葉子節點數
public function yezi($root,&$geshu)
if($root->lchild==null && $root->rchild==null)
$this->yezi($root->lchild,$geshu);
$this->yezi($root->rchild,$geshu);
} //非遞迴遍歷
public function feidigui($root)
// $mydata = new mydata($root,false);
// echo $mydata->binnode->ch;
$stack = new my_stack();
//接受返回的鍊錶
$lk=$stack->init_stack();
//壓入棧
$stack->push_link($lk,new mydata($root,false));
while($stack->get_size($lk)>0)
else
if($nownode->binnode->lchild!=null)
$nownode->status=true;
$stack->push_link($lk,$nownode);
}} }
}$tree = new two****tree();
$root = $tree->init_tree();
$tree->xianxu($root);
echo "
";$tree->zhongxu($root);
echo "
";$tree->houxu($root);
echo "
";$gao=0;
$tree->gao($root,$gao);
echo "樹的高度height=
";$geshu=0;
$tree->yezi($root,$geshu);
echo "葉子節點的個數個
";echo "非遞迴遍歷
";$tree->feidigui($root);
/*a b c d e f g h
b d c e a f h g
d e c b h g f a
樹的高度height=4
葉子節點的個數3個
非遞迴遍歷
a b c d e f g h
*/?>
非遞迴遍歷用到棧
zhan.php
<?php
//鍊錶list
class linklist
//鍊錶節點
class linknode
}//棧的類
class my_stack
//入棧
public function push_link($lk,$data)
//獲取長度
public function get_size($lk)
//獲得棧頂元素
// public function get_top($lk)
//出棧
public function pop_stack($lk) }
/* $stack = new my_stack();
//接受返回的鍊錶
$lk=$stack->init_stack();
//入棧
$stack->push_link($lk,10);
$stack->push_link($lk,20);
$stack->push_link($lk,30);
//遍歷 判斷元素》0 然後獲得棧頂元素,輸出後 再彈出棧
基本上佇列和棧 都是用鍊錶實現的 比陣列的麻煩些
如果是陣列 直接下標0入棧 size++ 出棧直接取size-1 然後size--就ok了
二叉樹遞迴遍歷和非遞迴遍歷
用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...
二叉樹遍歷(遞迴和非遞迴)
二叉樹的中序遍歷 二叉樹的後序遍歷 測試二叉樹的節點定義如下 節點 二叉樹的前序遍歷順序為 根左右。如下圖所示,前序遍歷順序為 1245367。遞迴 public static void preorder treenode root system.out.print root.val preorde...
二叉樹遍歷(遞迴 非遞迴)
二叉樹以及對二叉樹的三種遍歷 先根,中根,後根 的遞迴遍歷演算法實現,以及先根遍歷的非遞迴實現。node public class node public node left public node right public object value 遍歷訪問操作介面 public inte ce ...