文档章节

PHP数据结构之实现链式二叉树与遍历

小洋哥
 小洋哥
发布于 2013/08/13 23:12
字数 398
阅读 898
收藏 15
<?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());




© 著作权归作者所有

共有 人打赏支持
小洋哥
粉丝 22
博文 73
码字总数 39565
作品 0
成都
程序员
加载中

评论(1)

旁边白
旁边白
用array赛,php的array太好用了
数据结构-二叉树的存储结构与遍历

定义 一个有穷的结点集合,可以为空。若不为空,则它是由根结点和称为其左子树和右子树的两个互不相交的二叉树组成。 二叉树的五种基本形态: tree_state 二叉树的子树是有顺序之分的,称为左...

IAM四十二
2017/10/24
0
0
二叉树的性质以及二叉树的遍历(非递归)(c语言)(一)

二叉树的性质: 性质 1 在二叉树的第i层上至多有2^(i-1)个结点(i>=1)。 性质 2 深度为k的二叉树至多有2^k-1个结点,(k>=1)。 性质 3 任何一颗二叉树,终端结点为n0,度为2的结点为n2,那...

奔跑的码农
2016/05/14
196
0
C语言/C++编程新手入门基础知识整理学习

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
04/01
0
0
Java数据结构和算法 - 二叉树

前言 数据结构可划分为线性结构、树型结构和图型结构三大类。前面几篇讨论了数组、栈和队列、链表都是线性结构。树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点...

fireway
08/23
0
0
数据结构课程主页-2016级

  新学期,再度起程!   翻转的数据结构课程再度迎来新的一批同学。   前两年,资源建设基本完备,课堂方案逐渐完善,同学们对新型的学习方式设计给予了肯定(参见2014级问卷调查和201...

sxhelijian
2017/08/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

linuxprobe16
19分钟前
0
0
OSChina 周日乱弹 —— 恨不得给你买张飞机挂票

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @开源中国首席灵魂师:分享张希/曹方的单曲《认真地老去》 来不及认真的年轻过,就认真的老去! 《认真地老去》- 张希/曹方 手机党少年们想听...

小小编辑
今天
168
6
如何实现靠谱的分布式锁?

分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够...

郑加威
今天
2
0
Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部