tree1.php

<?php
require_once "./duilie.php";
class BinNode{public $ch;public $lchild;public $rchild;public function __construct($data){$this->ch=$data;$this->lchild=null;$this->rchild=null;}}//封装自己数据类型
class mydata{public $BinNode;public function __construct($data){$this->BinNode=$data;}
}class twofucktree{//初始化public function init_tree(){/*AB        FC             G
D   E        H*/$nodeA= new BinNode('A');$nodeB= new BinNode('B');$nodeC= new BinNode('C');$nodeD= new BinNode('D');$nodeE= new BinNode('E');$nodeF= new BinNode('F');$nodeG= new BinNode('G');$nodeH= new BinNode('H');$nodeA->lchild = $nodeB;$nodeA->rchild = $nodeF;$nodeB->rchild = $nodeC;$nodeC->lchild = $nodeD;$nodeC->rchild = $nodeE;$nodeF->rchild = $nodeG;$nodeG->lchild = $nodeH;return $nodeA;}//求树的高度public function gao($root,&$height){if($root==null){return;}$lheight = $this->gao($root->lchild,$height);$rheight = $this->gao($root->rchild,$height);$height = $lheight>$rheight?$lheight+1:$rheight+1;return $height;}//先序public function xianxu($root){if($root==null){return;}echo $root->ch." ";$this->xianxu($root->lchild);$this->xianxu($root->rchild);}//中序public function zhongxu($root){if($root==null){return;}$this->zhongxu($root->lchild);echo $root->ch." ";$this->zhongxu($root->rchild);}//后序public function houxu($root){if($root==null){return;}$this->houxu($root->lchild);$this->houxu($root->rchild);echo $root->ch." ";}//叶子节点数public function yezi($root,&$geshu){if($root==null){return;}if($root->lchild==null && $root->rchild==null){$geshu++;}$this->yezi($root->lchild,$geshu);$this->yezi($root->rchild,$geshu);}//非递归遍历public function feidigui($root){if(null==$root){return;}// $mydata = new mydata($root,false);// echo $mydata->BinNode->ch;$stack = new my_stack();//接受返回的链表$lk=$stack->init_stack();//压入栈$stack->push_link($lk,new mydata($root,false));while($stack->get_size($lk)>0){$nownode = $stack->get_top($lk);$stack->pop_stack($lk);if($nownode->status==true){echo $nownode->BinNode->ch."&nbsp;";$nownode=null;continue;}else{//先序遍历 根左右  押入顺序 右左根if($nownode->BinNode->rchild!=null){$stack->push_link($lk,new mydata($nownode->BinNode->rchild,false));}if($nownode->BinNode->lchild!=null){$stack->push_link($lk,new mydata($nownode->BinNode->lchild,false));}$nownode->status=true;$stack->push_link($lk,$nownode);}}}//层序遍历public function cengxu($root){if($root==null){return;}$duilie = new lianbiao();$lk = $duilie->init_linklist();$duilie->push_link($lk,$root);while($duilie->get_size($lk)>0){$node=$duilie->get_top($lk);$duilie->pop_link($lk);echo $node->ch." ";//押入左右子树if($node->lchild!=null){$duilie->push_link($lk,$node->lchild);}if($node->rchild!=null){$duilie->push_link($lk,$node->rchild);}}}//层序遍历1 带层级的public function cengxu1($root){$num = 1;if($root==null){return;}$last=$root;$nlast=null;$duilie = new lianbiao();$lk = $duilie->init_linklist();$duilie->push_link($lk,$root);while($duilie->get_size($lk)>0){$node=$duilie->get_top($lk);$duilie->pop_link($lk);echo "第{$num}层节点为 ".$node->ch." ";//押入左右子树if($node->lchild!=null){$duilie->push_link($lk,$node->lchild);$nlast=$node->lchild;}if($node->rchild!=null){$duilie->push_link($lk,$node->rchild);$nlast=$node->rchild;}if($last==$node){$num++;$last = $nlast;echo "<br />";}}}}$tree = new twofucktree();$root = $tree->init_tree();$tree->xianxu($root);
echo "<br />";
$tree->zhongxu($root);
echo "<br />";
$tree->houxu($root);
echo "<br />";
$gao=0;
$tree->gao($root,$gao);
echo "树的高度height={$gao}<br />";
$geshu=0;
$tree->yezi($root,$geshu);echo "叶子节点的个数{$geshu}个<br />";
echo "层序遍历<br />";
$tree->cengxu($root);
echo "<br />";
echo "带层级层序遍历1<br />";
$tree->cengxu1($root);/*
A B C D E F G H
B D C E A F H G
D E C B H G F A
树的高度height=4
叶子节点的个数3个
层序遍历
A B F C G D E H
带层级层序遍历1
第1层节点为 A
第2层节点为 B 第2层节点为 F
第3层节点为 C 第3层节点为 G
第4层节点为 D 第4层节点为 E 第4层节点为 H */?>

duilie.php

<?phpclass linknode
{   public $data;public $next;public function __construct($data) {$this->data=$data;$this->next=null;}}class linklist
{public $linknode;public $rear;public $size;}class lianbiao
{//初始化public function init_linklist(){$linklist =   new linklist();$header   =   new linknode(-1);//存放头结点$linklist->linknode = $header;$linklist->rear = $linklist->linknode;$linklist->size=0;return $linklist;}//入队public function push_link($lk,$data){$new_node = new linknode($data);$lk->rear->next = $new_node;$lk->rear = $new_node;$lk->size++;}//获得队头元素public function get_top($lk){$current = $lk->linknode->next;return $current->data;}//获得队尾元素public function get_rear($lk){$current = $lk->rear;return $current->data;}//获取大小public function get_size($lk){return $lk->size;}//出队public function pop_link($lk){if($lk->size<=0){return;}if($lk->size==1){$del = $lk->linknode->next;$lk->linknode->next=null;$lk->rear=$lk->linknode;}else{$del = $lk->linknode->next;//echo $del->data;exit;$lk->linknode->next = $del->next;$del = null;}$lk->size--;}//销毁public function destroy_link($lk){$lk=null;}
}/*
$lianbiao = new lianbiao();
$lk = $lianbiao->init_linklist();$node1 = new linknode(10);
$node2 = new linknode(20);
$node3 = new linknode(30);
$lianbiao->push_link($lk,$node1);
$lianbiao->push_link($lk,$node2);
$lianbiao->push_link($lk,$node3);//遍历
while($lianbiao->get_size($lk)>0)
{$data=$lianbiao->get_top($lk);echo $data->data."<br />";$lianbiao->pop_link($lk);
}$lianbiao->destroy_link($lk);
*/?>

php二叉树层序遍历 带层数和不带层数 需要用到队列相关推荐

  1. 【LeetCode】专题一 二叉树层序遍历

    二叉树层序遍历 在本文中,我将会选取LeetCode上二叉树层序遍历的多道例题,并给出解答,通过多道题我们就可以发现,二叉树的层序遍历并不复杂,并且有着共通点. 102. 二叉树的层序遍历 给你二叉树 ...

  2. 二叉树层序遍历_求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  3. 牛客-二叉树层序遍历

    牛客-二叉树层序遍历 #include <stdio.h> #include <queue> #include <stack> #include <math. ...

  4. 数据结构:二叉树层序遍历和判断是否为完全二叉树

    层序遍历 从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程. while(队列!=NULL) ...

  5. 二叉树层序遍历分层[递归迭代两种思想+三种解法]

    层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...

  6. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)

    二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...

  7. C++二叉树层序遍历

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 二叉树的分类 二叉树的遍历 1.递归法 2. 迭代法 **3. 层序遍历 总结 二叉树的分类 满二叉树:如果一棵二叉树只有度 ...

  8. 二叉树层序遍历相关题目

    前言 102.二叉树的层序遍历 题目描述 前提知识 代码 107二叉树的层序遍历II 题目描述 代码 199.二叉树的右视图 题目描述 思路 代码 637.二叉树的层平均值 题目描述 思路 代码 42 ...

  9. 102 二叉树层序遍历

    层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组 BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列. 层序遍历相对于BFS, ...

最新文章

  1. 【网络流24题】D、魔术球问题(有向无环图的最小路径覆盖、思维)
  2. NOIP2018 集训(一)
  3. li:hover背景色
  4. 1-3_基本概念_程序进程
  5. PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射
  6. 【二分查找万能模板,告别死循环、告别越界】Leecode 34. 在排序数组中查找元素的第一个和最后一个位置
  7. C# RichTextBox 实现循环查找关键字
  8. C和汇编---while反汇编
  9. shell 脚本学习(一)
  10. oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。...
  11. java 防重_如何做一个防重设计
  12. 【BFS】LeetCode 130. Surrounded Regions
  13. transform3D转换
  14. 华为OJ——C++版合集
  15. 电工入门基础知识问答,入门电工学习宝典系列
  16. 固定链接设置朴素正常html无法显示,wordpress固定链接设置修改常见问题
  17. 京东云mysql镜像_京东云数据库RDS SQL Server高可用概述
  18. vue中provide和inject 用法
  19. ubuntu网络无法连接
  20. 惠斯登电桥传感器电路设计技巧

热门文章

  1. 数值计算基础(上溢下溢、梯度优化、牛顿法、KKT方法)
  2. 微信小程序如何零成本获客
  3. JavaScript创建对象几种形式
  4. 第九:Pytest进阶之xunit fixture
  5. python内建模块函数_Python中一些内建函数及os等模块的用法
  6. focal loss dice loss源码_0815——W2V的TF源码阅读
  7. gifcam使用缩小内存_Vuex3.1.1更新:支持jsDelivr,修复内存泄漏
  8. php 全局 路径,PHP问题包括全局路径
  9. spring+hibernate+mysql mvc 配置
  10. ecshop php5.5分类文字不显示,在PHP5.5下ecshop修正文件报错归类