Recursion 使用递归在二叉节点树中插入
下面是我的代码。在向左或右节点插入值后,我尝试返回头部节点。我理解了插入的概念,但我无法理解如何将头部节点恢复到原来的状态,因为添加了附加节点后,头部节点又恢复到原来的状态。 这正是我不明白的地方Recursion 使用递归在二叉节点树中插入,recursion,data-structures,binary-search-tree,nodes,Recursion,Data Structures,Binary Search Tree,Nodes,下面是我的代码。在向左或右节点插入值后,我尝试返回头部节点。我理解了插入的概念,但我无法理解如何将头部节点恢复到原来的状态,因为添加了附加节点后,头部节点又恢复到原来的状态。 这正是我不明白的地方 插入节点时,如何断开循环并返回其头部节点 递归是堆栈概念,它将基于后进先出输出,如果是后进先出,如何返回头节点 这是我的密码: class Node { int data; Node left; Node right;
class Node {
int data;
Node left;
Node right;
}
static Node Insert(Node root,int value)
{
return nodeHelper(root,value);
}
static Node nodeHelper(Node root,int value){
Node nodeTracker = root;
Node temp;
if(root!=null){
if(value>root.data){
if(root.right==null){
temp =new Node();
temp.data = value;
root.right = temp;
return nodeTracker;
}
else{
nodeHelper(root.right,value);
}
}
else{
if(root.left==null){
temp=new Node();
temp.data = value;
root.left = temp;
return nodeTracker;
}
else{
nodeHelper(root.left,value);
}
}
}
else{
temp=new Node();
temp.data = value;
return temp;
}
}
}
要返回树的根,需要传递第三个参数来跟踪根。像这样:
Node* nodeHelper(Node* nodeTracker, Node* parent, int value)
删除本地nodeTracker
变量
您的递归调用变成:
return nodeHelper(nodeTracker, parent.left, value);
(当然,右侧的分支也是如此)
您在insert
函数中的初始调用是:
return nodeHelper(root, root, value);
要返回树的根,需要传递第三个参数来跟踪根。像这样:
Node* nodeHelper(Node* nodeTracker, Node* parent, int value)
删除本地nodeTracker
变量
您的递归调用变成:
return nodeHelper(nodeTracker, parent.left, value);
(当然,右侧的分支也是如此)
您在insert
函数中的初始调用是:
return nodeHelper(root, root, value);
吉姆,谢谢你的评论。假设我传递的值是1,2,3,4,5,6,我的头部节点是4。当我将新值7添加到列表中时,如何将这个head节点返回到调用它的方法。另外,我在程序中有返回值,我返回的是temp值。我只是想确定你是否看到了。我试图理解我的逻辑/概念的基本情况。谢谢。这是链接。可能有很多方法,但我真的很感激如何在这种情况下使用我的逻辑,因为我很难理解递归概念。谢谢你,吉姆。这是非常有用的。谢谢你的反馈和评论。吉姆,谢谢你的评论。假设我传递的值是1,2,3,4,5,6,我的头部节点是4。当我将新值7添加到列表中时,如何将这个head节点返回到调用它的方法。另外,我在程序中有返回值,我返回的是temp值。我只是想确定你是否看到了。我试图理解我的逻辑/概念的基本情况。谢谢。这是链接。可能有很多方法,但我真的很感激如何在这种情况下使用我的逻辑,因为我很难理解递归概念。谢谢你,吉姆。这是非常有用的。感谢您的反馈和评论。nodeHelper将在正确的位置插入新节点。您可以在Insert方法中使用根。为什么不能从Insert方法返回根呢static Node Insert(Node root,int value){nodehelp(root,value);return root;}
nodehelp将在正确的位置插入新节点。您可以在Insert方法中使用根。为什么不能从Insert方法返回根呢<代码>静态节点插入(节点根,int值){nodeHelper(根,值);返回根;}