【发布时间】:2019-04-14 22:57:45
【问题描述】:
假设上面的方法有两个参数a and b:
- a :表示我们需要遍历的树的根节点,直到我们得到正确的节点
- b :表示要作为左孩子添加到a的最右侧节点的节点。
我只需要知道如何将`节点添加到树的最右边的节点,但作为左子节点。我实际上正在解决不同版本的this 问题。这里的问题是使用右指针。
以仅通过左指针遍历树的方式构造一棵树,从而生成树的前序遍历。
其实可以通过遍历树并维护一个previous node and linking them in the way we want :prev.left = current`来解决。
我解决这个问题的方法是: 如果有如下一棵树
(只需将节点2到5添加为左孩子 然后是 5 到 3 作为左孩子,最后是 6 到 4 作为左孩子。)
10
/ \
8 2
/ \ / \
3 5 4 6
10
/
8
/ \
3 5
/
2
/ \
4 6
10
/
8
/
3
/
5
/
2
/ \
4 6
10
/
8
/
3
/
5
/
2
/
4
/
6
10 8 3 5 2 4 6 这是树的pre-order traversal
我知道这可以通过使用`prev 指针和做一些事情来完成。我希望这样做。
10
/ \
8 2
/ \ / \
3 5 4 6
||
\/
10
/
8
/
3
/
5
/
2
/
4
/
6
节点定义为:
class Node{
int data;
Node left,right;
Node(int d)
{
data=d;
left=null;
right=null;
}
}
【问题讨论】:
-
使用哪种语言?
-
@ZainArshad 它在 Java 中
-
你有没有尝试过?
-
void addToEnd(Node a, Node b){ if(a.right==null) a.right = b;否则 addToEnd(a.right, b) ; } //我已经尝试在最后添加它但是作为一个正确的孩子
-
好吧,我只是在编写代码......哈哈哈很高兴你解决了它......你可以在答案中分享解决方案!
标签: java binary-tree traversal