<?php /******************************************************** * 我寫的PHP都是從C語言的數據結構中演化而來************************ ************************************************************** /** * ******二叉樹圖**** * A * * * * * * * * * * B C * * * * * * * * D * * * * * *E * ****************** * PHP- 鏈式二叉樹的遍歷---先序遍歷(根,左,右)-中序遍歷(左,根,右)-後序遍歷(左,右,根) * 先 A B C D E * 中 B A D E C * 後 B E D C A * @Author 任孟洋 * @time 2013-8-10 ****/ Class BTreeNode{ public $data ; //數據域 public $LeftHand = NULL ; //左指針 public $RightHand = NULL ; //右指針 public function __construct($data){ if(!empty($data)) { $this->data = $data; } } //先序遍歷(根,左,右)遞歸實現 public function PreTraverseBTree($BTree){ if (NULL !== $BTree) { var_dump($BTree->data); //根 if (NULL !== $BTree->LeftHand) { $this->PreTraverseBTree($BTree->LeftHand); //遞歸遍歷左樹 } if (NULL !== $BTree->RightHand) { $this->PreTraverseBTree($BTree->RightHand); //遞歸遍歷右樹 } } } //中序遍歷(左,根,右)遞歸實現 public function InTraverseBTree($BTree){ if (NULL !== $BTree) { if (NULL !== $BTree->LeftHand) { $this->InTraverseBTree($BTree->LeftHand); //遞歸遍歷左樹 } var_dump($BTree->data); //根 if (NULL !== $BTree->RightHand) { $this->InTraverseBTree($BTree->RightHand); //遞歸遍歷右樹 } } } //後序遍歷(左,右,根)遞歸實現 public function FexTarverseBTree($BTree){ if (NULL !== $BTree) { if (NULL !== $BTree->LeftHand) { $this->FexTarverseBTree($BTree->LeftHand); //遞歸遍歷左樹 } if (NULL !== $BTree->RightHand) { $this->FexTarverseBTree($BTree->RightHand); //遞歸遍歷右樹 } var_dump($BTree->data); //根 } } } header("Content-Type:text/html;charset=utf-8"); echo '先的內存爲'.var_dump(memory_get_usage()); echo '<hr/>'; //建立五個節點 $A = new BTreeNode('A'); $B = new BTreeNode('B'); $C = new BTreeNode('C'); $D = new BTreeNode('D'); $E = new BTreeNode('E'); //鏈接造成一個二叉樹 $A->LeftHand = $B; $A->RightHand = $C; $C->LeftHand = $D; $D->RightHand = $E; //先序遍歷 echo '先序遍歷的結果'.'<br>'; $A->PreTraverseBTree($A); echo '<br/>中序遍歷的結果'.'<br>'; $A->InTraverseBTree($A); echo '<br/>後序列遍歷的結果'.'<br/>'; $A->FexTarverseBTree($A); echo '<hr/>'; echo '後的內存爲'.var_dump(memory_get_usage());