假设上面的方法有两个参数a and b
我只需要知道如何在树的最右边的节点添加一个‘节点,但作为一个左子节点。实际上,我正在解决一个不同版本的这问题。这里的问题是使用正确的指针。
构造一棵树的方式是,只通过左指针遍历树,生成树的预遍历。
实际上,可以通过遍历树和维护一个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;
}
}
发布于 2019-04-14 06:57:45
经过一番思考,我才能做到。
void addToRightMostNodeAsLeftChild(Node root,Node toBeAdded)
{
if(root.left==null)
{
root.left=toBeAdded;
}
else
{
Node k=getRMNode(root.left);
if(k.left==null)
{
k.left=toBeAdded;
}
else
addToRightMostNodeAsLeftChild(k, toBeAdded);
}
root.right=null;
}
因此,当调用该方法时,当我想将节点2放置为5的左子节点(即节点8的最右节点(此处作为左子节点添加到某些XYZ节点XYZ为8的最右边节点)时:
addToRightMostNodeAsLeftChild(root,X) /*root represents node 10 and X represents node 2*/
它被转换为:
10
/
8
/ \
3 5
/
2
/ \
4 6
https://stackoverflow.com/questions/55675521
复制