永发信息网

请高手发一下PHP版本二叉树按层遍历

答案:2  悬赏:0  手机版
解决时间 2021-02-23 04:04
  • 提问者网友:暗中人
  • 2021-02-22 05:49
需要一层一层
想知道每层个数
完全二叉 ,整体顺序上到下每层左到右
最佳答案
  • 五星知识达人网友:洎扰庸人
  • 2021-02-22 06:17
#二叉树的非递归遍历
3 class Node {
4 public $data;
5 public $left;
6 public $right;
7 }
8
9 #前序遍历,和深度遍历一样
10 function preorder($root) {
11 $stack = array();
12 array_push($stack, $root);
13 while (!empty($stack)) {
14 $cnode = array_pop($stack);
15 echo $cnode->data . " ";
16 if ($cnode->right != null) array_push($stack, $cnode->right);
17 if ($cnode->left != null) array_push($stack, $cnode->left);
18 }
19 }
全部回答
  • 1楼网友:低血压的长颈鹿
  • 2021-02-22 07:26
按照中序的方法去建立一颗树, 你仔细回想一下中序周游的过程,然后用它的逆过程就行了。。。 不过这里涉及到优先级的问题。。所以建立的过程 还是要使用到2个栈和运算符优先级。 过程和站的应用的计算器是一样的。。 过程::: 1.先把他们都转化成节点。建立一个操作数栈,一个运算符栈 栈里面存的都是节点的“地址” .... 2.然后按照计算器一样,弹出操作符的时候就他 操作数栈里的两个操作数做为 left 和 right 连接到 操作符。 3.操作符 出栈 并记录下来,两个操作数 也出栈, 把那个弹出的操作符压入操作数栈里面去。。。 4. 重复此过程 ,直到 操作符栈为空的时候 。 把操作数栈里剩下的节点赋值给二叉树的 root 。 就ok了。。。 ps: 想要输出的话 是中序周游,不过括号的问题很难弄,除非全部加括号输出。 最好是用后序的。。。 over 我自己打的字 分分啊~~~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯