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
 * @time   
 * @Author 任孟洋 
 ****/
 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());
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值