我正在尝试编写一个二叉树递归插入,并且我在最后几个小时内无法到达。我得到一个stackoverflow错误或者没有插入所有项目。
我想在树中插入这些值:
public void addNodeRecursion(MNode newNode){
if(root == null) {
root = newNode
}else{
addRecurs(newNode); //this is the recursive function, it should not return a node object
}
}
我想在不将root作为参数传递的情况下执行此操作。所以我的代码看起来像这样:
1 Step:
50
2 Step:
50
/
25
3 Step:
50
/ \
25 15
4 Step:
50
/ \
25 15
/
10
5 Step:
50
/ \
25 15
/ \
10 75
6 Step: (now notice that I am going back to the sibling of the current parent)
50
/ \
25 15
/ \ /
10 75 85
注意,我不是在讨论二进制搜索树而是二元树,其中元素顺序不相关。我关心如何插入元素。我想插入它们,如下所示:
addRecurs
现在这是我的private void addRecurs(MNode newNode) {
if(newNode == null) { return };
if(root.leftNode == null){ //Step 2 if the left node is null assign it
root.leftNode = newNode
}else{ //Else that means the right Node is null
root.rightNode = newNode // Step 3 set the right node
root = root.leftNode // the the parent to the left node
addRecurs(newNode) // repeat
}
};
功能:
{{1}}
它不起作用。
这可以在不跟踪或存储变量中的父项的情况下完成吗?
答案 0 :(得分:1)
我建议你用Heap之类的东西来支持你的树。基本上是一个基于数组的树结构,你似乎不需要排序部分,所以它非常简单。为了更好的答案,我们需要更多信息
答案 1 :(得分:0)
您的问题是here的答案。
static void addNode(node n)
{
if(root==null)
{
root = n;
}
else
{
node tmp = root; // save the current root
if(root.getValue()>n.getValue())
{
root = root.leftLink;
addNode(n);
}
else if(root.getValue()<n.getValue())
{
root = root.rightLink;
addNode(n);
}
root = tmp; // put the root back to its original value
}
return;
}