使用递归在二进制节点树中插入

时间:2017-11-19 23:33:05

标签: recursion data-structures binary-search-tree nodes

以下是我的代码。在向左或右节点插入值后,我正在尝试返回头节点。我理解插入的概念,但是我无法理解如何将我的头节点返回到现在它已经恢复到添加了添加节点的原始状态。 这是我不明白的。

  1. 当我插入节点时,如何断开循环并返回其头节点。
  2. 递归是基于LIFO输出的堆栈概念,如果是lifo,我怎样才能返回头节点
  3. 这是我的代码:

       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; 
                }
    
            }
            }
    

1 个答案:

答案 0 :(得分:0)

要返回树的根,您需要传递第三个参数来跟踪根。像这样:

Node* nodeHelper(Node* nodeTracker, Node* parent, int value)

删除本地nodeTracker变量。

您的递归调用变为:

return nodeHelper(nodeTracker, parent.left, value);

(当然,right分支也是如此)

您在insert函数中的初始调用是:

return nodeHelper(root, root, value);