我用java创建了一个二进制搜索树,允许用户向该树添加节点
这是我在java中实现的二叉树,它在创建时接受根节点,然后自动计算出它应该将子节点添加到树的左侧或右侧。
public class BinarySearchTree {
Node root = null;
public BinarySearchTree(Node root){
this.root =root;
}
public void add(int data){
Node newNode = new Node(data);
if(this.root ==null){
newNode =this.root;
}
if(data>this.root.data){
addRight(root,newNode);
}
if(data<this.root.data){
addLeft(root,newNode);
}
}
public Node getRoot(){
return this.root;
}
private void addLeft(Node root, Node newNode) {
if(root.leftChild == null){
root.leftChild = newNode;
}
else {
this.root = this.root.leftChild;
add(newNode.data);
}
}
private void addRight(Node root,Node newNode) {
if (root.rightChild == null){
root.rightChild = newNode;
}
else {
this.root = this.root.rightChild;
add(newNode.data);
}
}
}
但是当我尝试使用getRoot()方法检索根节点时。它返回根的子节点,而不是我传入的实际根节点。
这是一个使用它的例子
TreeHight treeHight = new TreeHight();
Node root = new Node(100);
BinarySearchTree unbalance = new BinarySearchTree(root);
unbalance.add(200);
unbalance.add(50);
unbalance.add(250);
unbalance.add(350);
当我尝试获取根节点时,它给我
250
作为第一个节点,而不是100
。
如何检索此树的根节点?
您正在编辑这一行的根:
this.root = this.root.rightChild;
我认为您应该像这样递归地将新节点添加到右侧:
else {
addRight(this.root.rightChild, newNode);
}
请注意,我认为您在这个块“add方法”中遇到了问题:
if(this.root ==null){
newNode =this.root; // it should be this.root = newNode;
}
您可以在代码中编写:
this.root = this.root.leftChild;
add(newNode.data);
这大概是错误的行为吧?
您应该将其改写为:
add(this.root.leftChild,newNode);
然后定义一个递归方法,该方法查看该项是否应存储在子轨迹的左/右。
类似的东西:
public void add(Node subroot, int data){
if(data > subroot.data){
addRight(subroot,data);
}
else if(data < subroot.data){
addLeft(subroot,newNode);
}
}
private void addLeft(Node subroot, int data) {
if(subroot.leftChild == null){
subroot.leftChild = new Node(data);
}
else {
add(subroot.leftChild,data);
}
}
private void addRight(Node subroot, int data) {
if(subroot.rightChild == null){
subroot.rightChild = new Node(data);
}
else {
add(subroot.rightChild,data);
}
}
然后,add
方法是:
public void add(int data){
if(this.root == null){
this.root = new Node(data);
}
else {
this.add(this.root,data);
}
}
我认为二叉树的一个不变量是根保持不变。顺便说一下,addRight
也是如此。
最后你还写道:
newNode =this.root;
在您的add
方法中,这当然没有多大意义。
给定二叉查找树(BST)和整数val的根。 在BST中找到该节点的值等于val的节点,并返回以该节点为根的子树。如果这样的节点不存在,则返回null。 为什么'ans=root'不起作用??
本文向大家介绍在Javascript二进制搜索树中搜索值,包括了在Javascript二进制搜索树中搜索值的使用技巧和注意事项,需要的朋友参考一下 我们将使用BST的属性在其中查找元素。首先让我们看一下搜索的迭代实现- 示例 在此功能中,我们从根作为currNode开始,然后将我们的数据与currNode的数据进行比较。如果找到匹配项,则返回true,否则我们将继续根据数据与currNode数据
问题内容: 我正在编写一个使用二进制搜索树存储数据的程序。在以前的程序中(无关),我能够使用Java SE6随附的实现来实现链表。二进制搜索树是否有类似的东西,还是我需要“从头开始”? 问题答案: 您可以使用。被实现为一棵红黑树,这是一个自平衡二进制搜索树。
本文向大家介绍Javascript中的二进制搜索树类,包括了Javascript中的二进制搜索树类的使用技巧和注意事项,需要的朋友参考一下 这是BinarySearchTree类的完整实现- 示例
我试着删除二叉查找树的节点,当我打印出来的时候,我得到的结果实际上不是这个删除,实际上可以删除二叉树本身的任何键。 我是二进制搜索树的新手。有人能帮我写代码吗?我们将感谢您的帮助。 谢谢 完整代码
我正在尝试为二叉搜索树类编写一种方法来修改平衡的普通树,这使得树仅在一侧具有节点。 从元素在不平衡树中出现的顺序来看,依序遍历(左、中、右)之间似乎存在某种关系。