经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
php 二叉树遍历
来源:cnblogs  作者:yangzailu  时间:2021/3/8 12:03:03  对本文有异议

二叉树是逻辑结构,二叉链表是二叉树的物理实现,是它的一种存储结构。两者之间的关系属于概念和实现,抽象和具体的关系。

 

  • 前序遍历:根节点->左子树->右子树
  • 中序遍历:左子树->根节点->右子树
  • 后序遍历:左子树->右子树->根节点

深度优先遍历:

    前序遍历:10 8 7 9 12 11 13
    中序遍历:7 8 9 10 11 12 13
    后序遍历:7 9 8 11 13 12 10

广度优先遍历:

    层次遍历:10 8 12 7 9 11 13

二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。

  1. <?php
  2. /********************************************************
  3. * 我写的PHP都是从C语言的数据结构中演化而来************************
  4. **************************************************************
  5. * /**
  6. * ******二叉树图****
  7. * A *
  8. * * * *
  9. * * * *
  10. * B C *
  11. * * *
  12. * * *
  13. * D *
  14. * * *
  15. * *E *
  16. ******************
  17. * PHP- 链式二叉树的遍历---先序遍历(根,左,右)-中序遍历(左,根,右)-后序遍历(左,右,根)
  18. * 先 A B C D E
  19. * 中 B A D E C
  20. * 后 B E D C A
  21. * @time
  22. * @Author
  23. ****/
  24. Class BTreeNode
  25. {
  26. public $data; //数据域
  27. public $LeftHand = NULL; //左指针
  28. public $RightHand = NULL; //右指针
  29. public function __construct ($data)
  30. {
  31. if (!empty($data)) {
  32. $this->data = $data;
  33. }
  34. }
  35. //先序遍历(根,左,右)递归实现
  36. public function PreTraverseBTree ($BTree)
  37. {
  38. if (NULL !== $BTree) {
  39. var_dump($BTree->data);//根
  40. if (NULL !== $BTree->LeftHand) {
  41. $this->PreTraverseBTree($BTree->LeftHand); //递归遍历左树
  42. }
  43. if (NULL !== $BTree->RightHand) {
  44. $this->PreTraverseBTree($BTree->RightHand); //递归遍历右树
  45. }
  46. }
  47. }
  48. //中序遍历(左,根,右)递归实现
  49. public function InTraverseBTree ($BTree)
  50. {
  51. if (NULL !== $BTree) {
  52. if (NULL !== $BTree->LeftHand) {
  53. $this->InTraverseBTree($BTree->LeftHand); //递归遍历左树
  54. }
  55. var_dump($BTree->data); //根
  56. if (NULL !== $BTree->RightHand) {
  57. $this->InTraverseBTree($BTree->RightHand); //递归遍历右树
  58. }
  59. }
  60. }
  61. //后序遍历(左,右,根)递归实现
  62. public function FexTraverseBTree ($BTree)
  63. {
  64. if (NULL !== $BTree) {
  65. if (NULL !== $BTree->LeftHand) {
  66. $this->FexTraverseBTree($BTree->LeftHand); //递归遍历左树
  67. }
  68. if (NULL !== $BTree->RightHand) {
  69. $this->FexTraverseBTree($BTree->RightHand); //递归遍历右树
  70. }
  71. var_dump($BTree->data); //根
  72. }
  73. }
  74. }
  75. header("Content-Type:text/html;charset=utf-8");
  76. echo '先的内存为' . var_dump(memory_get_usage());
  77. echo '<hr/>';
  78. //创建五个节点
  79. $A = new BTreeNode('A');
  80. $B = new BTreeNode('B');
  81. $C = new BTreeNode('C');
  82. $D = new BTreeNode('D');
  83. $E = new BTreeNode('E');
  84. //连接形成一个二叉树
  85. $A->LeftHand = $B;
  86. $A->RightHand = $C;
  87. $C->LeftHand = $D;
  88. $D->RightHand = $E;
  89. //先序遍历
  90. echo '先序遍历的结果' . '<br>';
  91. $A->PreTraverseBTree($A);
  92. echo '<br/>中序遍历的结果' . '<br>';
  93. $A->InTraverseBTree($A);
  94. echo '<br/>后序列遍历的结果' . '<br/>';
  95. $A->FexTraverseBTree($A);
  96. echo '<hr/>';
  97. echo '后的内存为' . var_dump(memory_get_usage());

 

原文链接:http://www.cnblogs.com/yangzailu/p/12572556.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号