PHP數據結構之實現鏈式二叉樹與遍歷

<?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());
相關文章
相關標籤/搜索