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(根,值);返回根;}