二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆
[php] view plain copy
  1. <?php
  2. class Node{
  3. public $value;
  4. public $left;
  5. public $right;
  6. }
  7. //先序遍历 根节点 ---> 左子树 ---> 右子树
  8. function preorder($root){
  9. $stack=array();
  10. array_push($stack,$root);
  11. while(!empty($stack)){
  12. $center_node=array_pop($stack);
  13. echo $center_node->value.' ';//先输出根节点
  14. if($center_node->right!=null){
  15. array_push($stack,$center_node->right);//压入左子树
  16. }
  17. if($center_node->left!=null){
  18. array_push($stack,$center_node->left);
  19. }
  20. }
  21. }
  22. //中序遍历,左子树---> 根节点 ---> 右子树
  23. function inorder($root){
  24. $stack = array();
  25. $center_node = $root;
  26. while (!empty($stack) || $center_node != null) {
  27. while ($center_node != null) {
  28. array_push($stack, $center_node);
  29. $center_node = $center_node->left;
  30. }
  31. $center_node = array_pop($stack);
  32. echo $center_node->value . " ";
  33. $center_node = $center_node->right;
  34. }
  35. }
  36. //后序遍历,左子树 ---> 右子树 ---> 根节点
  37. function tailorder($root){
  38. $stack=array();
  39. $outstack=array();
  40. array_push($stack,$root);
  41. while(!empty($stack)){
  42. $center_node=array_pop($stack);
  43. array_push($outstack,$center_node);//最先压入根节点,最后输出
  44. if($center_node->left!=null){
  45. array_push($stack,$center_node->left);
  46. }
  47. if($center_node->right!=null){
  48. array_push($stack,$center_node->right);
  49. }
  50. }
  51. while(!empty($outstack)){
  52. $center_node=array_pop($outstack);
  53. echo $center_node->value.' ';
  54. }
  55. }
  56. $a=new Node();
  57. $b=new Node();
  58. $c=new Node();
  59. $d=new Node();
  60. $e=new Node();
  61. $f=new Node();
  62. $a->value='A';
  63. $b->value='B';
  64. $c->value='C';
  65. $d->value='D';
  66. $e->value='E';
  67. $f->value='F';
  68. $a->left=$b;
  69. $a->right=$c;
  70. $b->left=$d;
  71. $c->left=$e;
  72. $c->right=$f;
  73. preorder($a);//A B D C E F
  74. echo '<hr/>';
  75. inorder($a);//D B A E C F
  76. echo '<hr/>';
  77. tailorder($a);//D B E F C A
结果:
A B D C E F

D B A E C F

D B E F C A
二叉树的三种遍历,先,中,后遍历 10
先序就是先遍历根,再遍历左子树,再遍历右子树。例如上图的先序遍历是:ABCDEFGHK
中序就是先遍历左子树,再遍历根,再右子树。例如上图的中序遍历是:BDCAEHGKF
后序就是先遍历左子树,再右子树,再根。例如上图的后序遍历是:DCBHKGFEA
本回答由提问者推荐
答案纠错 | 评论(4)
139 111
其他回答
前序遍历:ABDECFG
中序遍历:DBEAFCG
后序遍历:DEBFGCA
前序遍历:1 2 4 3 5 7 6
中序遍历:2 4 1 5 7 3 6
后序遍历:4 2 7 5 6 3 1
做类似的题目,你可以先由两个遍历画出二叉树。通过形象的二叉树来写出另一个遍历,写的方法如上(递归)。画出二叉树的方法如下:
已知一棵二叉树的前序序列和中序序列,构造该二叉树的过程如下:
1. 根据前序序列的第一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在前序序列中确定左右子树的前序序列;
4. 由左子树的前序序列和中序序列建立左子树;
5. 由右子树的前序序列和中序序列建立右子树。
已知一棵二叉树的后序序列和中序序列,构造该二叉树的过程如下:
1. 根据后序序列的最后一个元素建立根结点;
2. 在中序序列中找到该元素,确定根结点的左右子树的中序序列;
3. 在后序序列中确定左右子树的后序序列;
4. 由左子树的后序序列和中序序列建立左子树;
5. 由右子树的后序序列和中序序列建立右子树。

二叉树 -php实现先序、中序、后序遍历二叉树相关推荐

  1. Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)

    目录 一.树 二.二叉树 树和前面所讲的表.堆栈和队列等这些线性数据结构不同,树不是线性的.在处理较多数据时,使用线性结构较慢,而使用树结构则可以提高处理速度.不过,相对于线性的表.堆栈和队列等线性数 ...

  2. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  3. 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)

    7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...

  4. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  5. 二叉树的构造(前序+中序)---(后序 + 中序)

    二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...

  6. 先序序列和中序序列构造二叉树,中序序列和后序序列构造二叉树

    1:首先读者要了解二叉树BinaryTree基本概念,其次区分左子树与左孩子节点,右子树与右孩子节点.(在数据结构中      一个节点可以成为一棵树,对于没有孩子节点的节点称为为叶子节点). 2:在 ...

  7. 二叉树的前、中、后序遍历

    所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...

  8. 非递归先、中、后序遍历二叉树(C语言)

    文章目录 前言 一.二叉树非递归遍历算法 1.先序遍历 2.中序遍历 3.后序遍历 二.完整程序 三.运行结果实例 前言 本程序采用C语言编写,栈和二叉树的基本操作函数基于严蔚敏老师的<数据结构 ...

  9. 二叉树前、中、后线索化及对应前、中、后序线索化遍历

    二叉树前中后线索化及对应前中后序线索化遍历(图解) 二叉树线索化都是套路,会一种另外两种只是稍微修改一下代码 值得一提的是后序线索化输出,逆序思维将后序线索化看成前序,采用"前序线索化输出& ...

  10. 二叉树遍历方法——前、中、后序遍历(图解)

    目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...

最新文章

  1. HTML5网页上播放mp4失败的原因
  2. 深入理解计算机系统学后感,深入理解计算机系统(读书笔记)
  3. MySQL性能基准测试对比:MySQL 5.7与MySQL 8.0
  4. vi is failed with error E382: Cannot write, 'buftype' option is set in Linux
  5. spring 异常捕获异常_跟踪异常–第5部分–使用Spring进行计划
  6. 算法基础——列表查找
  7. c语言divide error,Python numpy.corrcoef()RuntimeWarning:在true_divide中遇到无效值c / = stddev [:,None]...
  8. 拓端tecdat|Python基于粒子群优化的投资组合优化研究
  9. 【动手学深度学习】代码(持续更新)
  10. win10设置打开闪退怎么办 电脑windows10设置打开闪退解决方法
  11. 【高数复盘】1.1映射与函数思维导图
  12. java循环26个字母_java基础 26个英文字母循环输出 13个字母空一行
  13. 联想小新air13pro重装系统_联想小新Air13Pro笔记本U盘重装win10系统教程
  14. 女人不适合做产品经理?
  15. SNS背后的科学(1)从六度分隔到无尺度网络
  16. vue中watch的详解
  17. iOS——directory not found for option 链接错误
  18. Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频
  19. kafka+flume 实时数据处理
  20. tvOS游戏开发系列(SpriteKit)之准备工作(一)

热门文章

  1. 【VBA编程】15.WorkSheet对象常用属性
  2. mac OS X中升级php5.5至php5.6 or php7
  3. s3c6410 uboot代码分析《一》
  4. DHCP服务器在企业网络中的应用
  5. 使用PHPExcel判别和格式化Excel中的日期格式
  6. 配置Eureka高可用
  7. Python网络_TCP/IP简介
  8. Caffe上用SSD训练和测试自己的数据
  9. 使用yum时,保留下载包设置
  10. 【DS】排序算法之归并排序(Merge Sort)