<?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. codeforces510B

    Fox And Two Dots CodeForces - 510B Fox Ciel 正在玩一个手机拼图游戏,被称之为 "Two Dots".基础关卡是在一个大小为 n × m的 ...

  2. codeforces472B

    Design Tutorial: Learn from Life CodeForces - 472B One way to create a task is to learn from life. Y ...

  3. python----面对对象三大特征2

    多态 什么是多态?多态指的是一类事物有多种形态,例如一个动物类,狗和猫都通过继承动物类来得来,这样我们可以将狗.猫称作动物类的另一种形态. 在java中也存在多态,java中的多态是用来解决在一个函数 ...

  4. pgm15

    这部分我们讨论结构学习,也就是 graph 的边我们并不清楚.很自然我们可以用 fully observed 数据来做,但是也可能碰到有 missing data 的情况.一般来说前者是比较常见的.就 ...

  5. BUPT2017 wintertraining(15) #1 题解

    拖了一周才完成的题解,抛出一个可爱的表情 (っ'-')╮ =͟͟͞͞❤️.对我来说E.F比较难,都是线段树的题,有点久没写了. A - Infinite Sequence CodeForces - 6 ...

  6. 洛谷 P4211 [LNOI2014]LCA 解题报告

    [LNOI2014]LCA 题意 给一个\(n(\le 50000)\)节点的有根树,询问\(l,r,z\),求\(\sum_{l\le i\le r}dep[lca(i,z)]\) 一直想启发式合并 ...

  7. Java核心技术-具体的集合

    除了Map结尾的类之外,其他都实现了Collection接口,而以Map结尾的类实现了Map接口. 链表 在Java程序设计语言中,所有链表实际上都是双向链表的(double linked)--即每个 ...

  8. ffmpeg 在ubuntu上编译环境搭建和开发

    步骤如下: 1. 下载 官网永远是王道,呵呵:http://ffmpeg.org/download.html 或者 svn checkout svn://svn.mplayerhq.hu/ffmpeg ...

  9. Red Hat 6.3安装gcc gc++

    首先安装gcc需要相应的rpm依赖包,在安装系统的镜像文件中就有这些rpm包 首先在光驱中选择系统的安装包载入 如果桌面显示有如下的光驱 说明是已经载入了镜像,这时候,需要挂载一下镜像到mnt目录 先 ...

  10. 51Nod1376 (dp + BIT // cdq分治)

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 求LIS的数量. 乍一看觉得还是dp,仔细一看确实可以用dp做. ...