当前位置: 首页 > 知识库问答 >
问题:

使用递归的二叉搜索树插入

羿易安
2023-03-14

我在下面代码的逻辑中做错了什么:它只返回插入节点的值,而不是整个树。(见输出)

 /* Node is defined as :
 class Node 
 int data;
 Node left;
 Node right;

 */

static Node Insert(Node root,int value)
 {       
  if(root == null){
     root = new Node();
     root.data= value ;
     return root;   
  }

 else{
  if(value<root.data)
   return Insert(root.left,value);

 else if(value > root.data)
     return  Insert(root.right,value);

 else return null;    
    }

   }
   5           //number of nodes

  4 2 3 1 7    // values of nodes

   6           //value of node to be inserted

(预期)产出:

1 2 3 4 6 7

我的输出:

 6

共有1个答案

荣曾笑
2023-03-14

只需将if条件修改为:

if(root == null)
{
 root = new Node();
 root.data= value ;
 root.left=null;
 root.right=null;
 return root;
}

并将else条件修改为:

else
{
  if(value<root.data)
   {
     root.left=Insert(root.left,value);
     return root;
   }
  else if(value > root.data)
   {
     root.right= Insert(root.right,value);
     return root;
   }
  else 
   {
     System.out.println("duplicate value"); 
     return root;
   }
}    
 类似资料:
  • 我试图验证二叉查找树。给定二叉树的根,确定它是否是有效的二叉查找树(BST)。 有效的BST定义如下: 节点的左子树只包含键小于节点键的节点。节点的右子树只包含键大于节点键的节点。左子树和右子树也必须是二叉搜索树。 https://leetcode.com/problems/validate-binary-search-tree/ 我正在使用递归解决方案,但它未能通过以下测试用例: 输入:[2,1

  • 我试图为我的BST做一个递归加法。public add方法接受一个int参数,private方法接受相同的int和一个节点。这是我目前掌握的代码 我经常得到空指针,也尝试过调试,但我的逻辑中有一些我看不到的缺陷。

  • 对于我用私有字段实现的二叉树对象 我有一个方法,它需要返回一个树,包括具有的节点和具有的节点之间的所有键及其相应值。这个方法也需要使用递归来执行。 我遇到的问题是,我无法找到一种方法来获得一个以结尾的树(可能看起来像一个LinkedList),而不包括和。我想我应该首先在根的左树或右树上递归调用方法,这取决于startKey是大于还是小于根键,所以: 这将一直在树中导航,直到到达包含键的节点。当我

  • 首先,这是家庭作业,所以把它放在外面。 我应该用特定的方法实现二叉查找树: void insert(字符串)、boolean remove(字符串)和boolean find(字符串)。 我已经能够成功地编程和测试插入,并找到方法,但我有困难与删除。 我的程序中发生的事情是,删除实际上并没有从树中删除任何东西,我相信这是因为它只引用当前节点的本地创建,但我可能错了。我认为我可以实现我需要测试的不同

  • 问题内容: 我想在非二叉树中搜索一个项目(任何节点都可以有n个孩子)并立即退出递归。所讨论的节点可以是任何节点,而不仅仅是叶子。 这是我的代码,但我没有完整的搜索。 nNode包含: (是孩子) 和数据对象。 问题答案: 探索第一个孩子后,您不应该退出。您不需要循环前面的语句。

  • 由于它是一种递归方法,我无法弄清楚如何使用这些stg参数来存储树元素数据。我希望将stg保留在那里,以便学习如何将字符串数据存储在递归方法中。我该怎么做呢?(基本上我想摆脱诱惑1) 编辑:我尝试了stg+=root.getElement()+“”;带返回STG;但这并不奏效 输出示例“树的顺序遍历:1 2 3 X Y Z X Y Z”

  • 在bst的常规递归代码中,树的左右元素在每个递归调用中都设置了(Int.left=andt.right=)。这不是再次构造树吗? 存储对前一个节点的引用,然后根据值将新节点添加到左侧或右侧,不是更好吗?还是我在这里遗漏了什么?谢谢 要插入一个新元素,代码会将每个元素或子树指定为左和右。我的问题是,这不是开销吗?要插入链接列表,我们只需导航到最后一个节点并在那里执行链接。这里,我们在每次插入时对整个