【问题标题】:insertion in binary node tree using recursion使用递归插入二叉节点树
【发布时间】:2018-05-03 03:36:45
【问题描述】:

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

  1. 当我插入我的节点时,我怎样才能打破循环并返回它的头节点。
  2. 递归是堆栈概念,它将基于 LIFO 输出,如果是 LIFO,我如何才能返回头节点

这是我的代码:

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

        }
        }

【问题讨论】:

  • nodeHelper 将在正确的位置插入新节点。您在 Insert 方法中有可用的根目录。为什么不能只从 Insert 方法返回根。 static Node Insert(Node root,int value) { nodeHelper(root,value); return root; }

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


【解决方案1】:

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

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

删除本地的nodeTracker 变量。

你的递归调用变成:

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

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

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

return nodeHelper(root, root, value);

【讨论】:

  • 吉姆,感谢您的评论。假设我正在传递值 1,2,3,4,5,6,而我的头节点可以说是 4。当我将新值 7 添加到列表中时,我该如何将此头节点返回给方法我称之为。此外,我在返回临时值的程序中有返回值。只是想确定你是否看到了。我试图了解我的逻辑/概念的基本情况。谢谢。
  • 这里是链接。可能有很多方法,但我真的很感激如何在这种情况下使用我的逻辑,因为我很难理解递归概念。 hackerrank.com/challenges/binary-search-tree-insertion/problem
  • 谢谢吉姆。这非常有用。感谢您的反馈和 cmets。
猜你喜欢
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2020-07-24
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多