二叉树 -php实现先序、中序、后序遍历二叉树

来源:互联网 发布:js empty 编辑:程序博客网 时间:2024/06/04 17:41
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆

[php]view plaincopy
  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)
139111
其他回答
前序遍历: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. 由右子树的后序序列和中序序列建立右子树。
阅读全文
0 0