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

1<?php 2 3/******************************************************** 4* 我写的PHP都是从C语言的数据结构中演化而来************************ 5************************************************************** 6/** 7 *    ******二叉树图**** 8      *      A                    *  9      *     * *                   *  10      *    *   *                  *  11      *   B     C                *        12      *        *                   *  13      *       *                    * 14      *      D                    *   15      *       *                    * 16      *         *E                * 17      ****************** 18 19 * PHP- 链式二叉树的遍历---先序遍历(根,左,右)-中序遍历(左,根,右)-后序遍历(左,右,根) 20 * 先 A B C D E 21 * 中 B A D E C 22 * 后 B E D C A 23 * @Author 任孟洋  24 * @time   2013-8-10 25 ****/ 26  27 28 Class  BTreeNode{ 29       30         public  $data ; //数据域 31         public  $LeftHand  = NULL ; //左指针 32         public  $RightHand = NULL ; //右指针 33 34       public function  __construct($data){ 35      36         if(!empty($data)) 37         { 38 39          $this->data = $data; 40         } 41       } 42        43        44          //先序遍历(根,左,右)递归实现 45       public  function PreTraverseBTree($BTree){ 46 47              if (NULL !== $BTree) 48              {            49                var_dump($BTree->data);  //根 50 51                if (NULL !== $BTree->LeftHand) 52                 { 53                    $this->PreTraverseBTree($BTree->LeftHand); //递归遍历左树 54                 } 55         56                  57                if (NULL !== $BTree->RightHand) 58                 { 59                    $this->PreTraverseBTree($BTree->RightHand); //递归遍历右树 60                 } 61                 62              }  63         } 64 65        //中序遍历(左,根,右)递归实现 66        public  function  InTraverseBTree($BTree){ 67               68              if (NULL !== $BTree) 69              {               70                if (NULL !== $BTree->LeftHand) 71                 { 72                    $this->InTraverseBTree($BTree->LeftHand); //递归遍历左树 73                 } 74         75                 var_dump($BTree->data); //根  76 77                if (NULL !== $BTree->RightHand) 78                 { 79                    $this->InTraverseBTree($BTree->RightHand); //递归遍历右树 80                 } 81                 82              }  83               84        } 85 86        //后序遍历(左,右,根)递归实现 87       public  function  FexTarverseBTree($BTree){ 88                89                if (NULL !== $BTree) 90              { 91                if (NULL !== $BTree->LeftHand) 92                 { 93                    $this->FexTarverseBTree($BTree->LeftHand); //递归遍历左树 94                 } 95         96                  97                if (NULL !== $BTree->RightHand) 98                 { 99                    $this->FexTarverseBTree($BTree->RightHand); //递归遍历右树 100                 } 101                 var_dump($BTree->data); //根 102              }  103        }  104} 105  106 header("Content-Type:text/html;charset=utf-8"); 107 echo '先的内存为'.var_dump(memory_get_usage()); 108 echo '<hr/>'; 109  110   //创建五个节点 111   $A  = new  BTreeNode('A'); 112   $B  = new  BTreeNode('B'); 113   $C  = new  BTreeNode('C'); 114   $D  = new  BTreeNode('D'); 115   $E  = new  BTreeNode('E'); 116    117 118   //连接形成一个二叉树 119 120   $A->LeftHand  = $B; 121   $A->RightHand = $C; 122   $C->LeftHand  = $D; 123   $D->RightHand = $E; 124    125   //先序遍历 126   echo '先序遍历的结果'.'<br>'; 127   $A->PreTraverseBTree($A); 128 129   echo '<br/>中序遍历的结果'.'<br>'; 130   $A->InTraverseBTree($A); 131 132   echo  '<br/>后序列遍历的结果'.'<br/>'; 133   $A->FexTarverseBTree($A); 134 135   echo '<hr/>'; 136   echo '后的内存为'.var_dump(memory_get_usage());
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )