<?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 FexTraverseBTree ($BTree)
{
if (NULL !== $BTree) {
if (NULL !== $BTree->LeftHand) {
$this->FexTraverseBTree($BTree->LeftHand); //递归遍历左树
}
if (NULL !== $BTree->RightHand) {
$this->FexTraverseBTree($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->FexTraverseBTree($A);
echo '<hr/>';
echo '后的内存为' . var_dump(memory_get_usage());

PHP二叉树的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  3. c 二叉树的使用

    简单的通过一个寻找嫌疑人的小程序 来演示二叉树的使用 #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  4. Java 二叉树遍历右视图-LeetCode199

    题目如下: 题目给出的例子不太好,容易让人误解成不断顺着右节点访问就好了,但是题目意思并不是这样. 换成通俗的意思:按层遍历二叉树,输出每层的最右端结点. 这就明白时一道二叉树层序遍历的问题,用一个队 ...

  5. 数据结构:二叉树 基于list实现(python版)

    基于python的list实现二叉树 #!/usr/bin/env python # -*- coding:utf-8 -*- class BinTreeValueError(ValueError): ...

  6. [LeetCode] Path Sum III 二叉树的路径和之三

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  7. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点

    Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...

  8. [LeetCode] Verify Preorder Serialization of a Binary Tree 验证二叉树的先序序列化

    One way to serialize a binary tree is to use pre-oder traversal. When we encounter a non-null node, ...

  9. [LeetCode] Binary Tree Vertical Order Traversal 二叉树的竖直遍历

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  10. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

随机推荐

  1. pinv

    moore-penrose pseudoinverse of matrix伪逆

  2. codeforces515B

    Drazil and His Happy Friends CodeForces - 515B Drazil有很多朋友,他们中有些人是快乐的,有些人是不快乐的. Drazil想让他的朋友变得快乐.于是, ...

  3. vimrc 的配置

    windows syntax on set nocompatible set guifont=Consolas:h17 set linespace=0 color molokai set clipbo ...

  4. CRM 2013 批量更新two options的缺省值

    1: string entNames = "new_print_plan,new_radio_plan,new_bill_board,new_tv_plan,new_btl_posm,new ...

  5. 洛谷 P4097 [HEOI2013]Segment 解题报告

    P4097 [HEOI2013]Segment 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段.记第 \(i\) 条被插入的线段的标号为 \(i\) 给定一个数 \(k\),询问 ...

  6. CAN总线疑惑与解答

    1    CAN总线2根数据线是怎么表示数据信息1和0的? Can总线采用差分数据表示方法,平时2个数据线为2.5V,表示隐性(1).当用数据0(显性)需要发送时1跟数据线上升到3.5V另一个下降到1 ...

  7. JavaScript -- throw、try 和 catch

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 很想java哦. <!DOCTYPE html> <html> <head& ...

  8. DownloadProvider 源码详细分析

    DownloadProvider 简介 DownloadProvider 是Android提供的DownloadManager的增强版,亮点是支持断点下载,提供了“开始下载”,“暂停下载”,“重新下载 ...

  9. centos7配置本地yum源 使用安装镜像安装软件

    1. 在cdrom挂载安装镜像.(物理机则插入光盘,虚拟机则在CD/DVD中选择iso镜像.如果虚拟机mount时提示找不到则在选择iso镜像上方勾选“已连接”和“启动时连接”,或者点击 虚拟机下方状 ...

  10. __slots__,__doc__,__del__,__call__,__iter__,__next__迭代器协议(三十六)

    1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象的__dic ...