文档章节

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

小洋哥
 小洋哥
发布于 2013/08/13 23:12
字数 398
阅读 838
收藏 15
点赞 0
评论 1
<?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
博文 38
码字总数 39565
作品 0
成都
程序员
加载中

评论(1)

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

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

IAM四十二 ⋅ 2017/10/24 ⋅ 0

二叉树的性质以及二叉树的遍历(非递归)(c语言)(一)

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

奔跑的码农 ⋅ 2016/05/14 ⋅ 0

C语言/C++编程新手入门基础知识整理学习

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

小辰带你看世界 ⋅ 04/01 ⋅ 0

树与二叉树

树的基本概念 1、结点的度 结点的度是子结点的个数。例如:结点1有三个字结点2,3,4,所以结点1的度为3。 2、树的度 树的度等于所有结点度中度最高的值。例如:上图中结点度最高为3,所以树...

小衰哥有点帅 ⋅ 2017/11/24 ⋅ 0

PHP实现二叉树的深度优先遍历(前序、中序、后序)和广度优先遍历(层次)

http://blog.csdn.net/baidu_30000217/article/details/52953127 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个结点只能访问一次。要特别注意的是,二叉树的深...

szxy1234 ⋅ 2017/08/24 ⋅ 0

数据结构课程主页-2016级

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

sxhelijian ⋅ 2017/08/30 ⋅ 0

几种数据存储结构详解

影响空间规模的几种数据存储结构 正文 所谓数据存储结构,就是数据的元素与元素之间在计算机中的一种表示,它的目的是为了解决空间规模问题,或者是通过空间规模问题从而间接地解决时间规模问...

长平狐 ⋅ 2012/11/12 ⋅ 1

线索二叉树及其遍历

遍历二叉树就是以一定的规则将二叉树中的节点排列成一个线性序列,从而得到二叉树节点的各种遍历序列,其实质是:对一个非线性的结构进行线性化。使得在这个访问序列中每一个节点都有一个直接...

robin_Xu_shuai ⋅ 2016/03/13 ⋅ 0

大一学习C语言和数据结构的菜鸟的困惑(VC++)

那个数据结构的二叉树的中序非递归遍历为什么很多人用顺序栈啊,我在电脑上搜了很多代码都是顺序栈,难道链式栈不能用吗?或者有什么样的原因??,求各位大神开导开导(用C语言,数据结构)

linbin0182 ⋅ 2013/04/05 ⋅ 4

Java Binary Tree && 链式存储结构

Java Binary Tree && 链式存储结构 以下使用二叉链表的方式实现,具体代码 构造的树的示意图 共有五个节点的二叉树 程序运行结果: =======先序遍历====== root 3 2 4 1 =======中序遍历===...

秋风醉了 ⋅ 2014/09/25 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

005. 深入JVM学习—Java堆内存参数调整

1. JVM整体内存调整图解(调优关键) 实际上每一块子内存区域都会存在一部分可变伸缩区域,其基本流程:如果内存空间不足,则在可变的范围之内扩大内存空间,当一段时间之后,内存空间不紧张...

影狼 ⋅ 31分钟前 ⋅ 0

内存障碍: 软件黑客的硬件视图

此文为笔者近日有幸看到的一则关于计算机底层内存障碍的学术论文,并翻译(机译)而来[自认为翻译的还行],若读者想要英文原版的论文话,给我留言,我发给你。 内存障碍: 软件黑客的硬件视图...

Romane ⋅ 今天 ⋅ 0

SpringCloud 微服务 (七) 服务通信 Feign

壹 继续第(六)篇RestTemplate篇 做到现在,本机上已经有注册中心: eureka, 服务:client、order、product 继续在order中实现通信向product服务,使用Feign方式 下面记录学习和遇到的问题 贰 or...

___大侠 ⋅ 今天 ⋅ 0

gitee、github上issue标签方案

目录 [TOC] issue生命周期 st=>start: 开始e=>end: 结束op0=>operation: 新建issueop1=>operation: 评审issueop2=>operation: 任务负责人执行任务cond1=>condition: 是否通过?op3=>o......

lovewinner ⋅ 今天 ⋅ 0

浅谈mysql的索引设计原则以及常见索引的区别

索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针. 数据库索引的设计原则: 为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索...

屌丝男神 ⋅ 今天 ⋅ 0

String,StringBuilder,StringBuffer三者的区别

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 首先说运行速度,或者说是, 1.执行速度 在这方面运行速度快慢为:StringBuilder(线程不安全,可变) > StringBuffer...

时刻在奔跑 ⋅ 今天 ⋅ 0

java以太坊开发 - web3j使用钱包进行转账

首先载入钱包,然后利用账户凭证操作受控交易Transfer进行转账: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/Credentials credentials = Wallet......

以太坊教程 ⋅ 今天 ⋅ 0

Oracle全文检索配置与实践

Oracle全文检索配置与实践

微小宝 ⋅ 今天 ⋅ 0

mysql的分区和分表

1,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一...

梦梦阁 ⋅ 今天 ⋅ 0

exception.ZuulException: Forwarding error

错误日志 com.netflix.zuul.exception.ZuulException: Forwarding error Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: xxx timed-out and no fallback available. Ca......

jack_peng ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部