用Java实现二叉搜索树
下面是我为二进制搜索树编写的代码。不幸的是,当我运行它时,它没有给出所需的输出。有人能告诉我我做错了什么吗用Java实现二叉搜索树,java,binary-search-tree,Java,Binary Search Tree,下面是我为二进制搜索树编写的代码。不幸的是,当我运行它时,它没有给出所需的输出。有人能告诉我我做错了什么吗 import java.util.ArrayList; public class BinaryOrderedTree { BinaryOrderedTree left; BinaryOrderedTree right; static BinaryOrderedTree top; int key; static ArrayList<Binar
import java.util.ArrayList;
public class BinaryOrderedTree {
BinaryOrderedTree left;
BinaryOrderedTree right;
static BinaryOrderedTree top;
int key;
static ArrayList<BinaryOrderedTree> values=new ArrayList<BinaryOrderedTree>();
public int getKey(){
return key;
}
public void setTop(BinaryOrderedTree top1){
top=top1;
}
public BinaryOrderedTree getLeft(){
return this.left;
}
public BinaryOrderedTree getRight(){
return this.right;
}
public BinaryOrderedTree(int key){
this.key=key;
}
public static BinaryOrderedTree addNode(BinaryOrderedTree node,BinaryOrderedTree top){
if (node.getKey()<top.getKey()){
if(top.left==null){
System.out.println(node.getKey());
System.out.println("left");
top.left=node;
}
else{
addNode(node,top.left);
}
}
if(node.getKey()>top.getKey()){
if(top.right==null){
System.out.println(node.getKey());
System.out.println("right");
top.right=node;
}
else{
addNode(node,top.right);
}
}
return node;
}
public static BinaryOrderedTree searchNode(BinaryOrderedTree search,
BinaryOrderedTree top){
if(search.getKey()==top.getKey()){
return top;
}
else if(search.getKey()<top.getKey()){
return searchNode(search,top.left);
}
else if(search.getKey()>top.getKey()){
return searchNode(search,top.right);
}
return null;
}
public static BinaryOrderedTree traverse(BinaryOrderedTree top){
values.add(top);
System.out.println(top.getKey());
if(top.left !=null)
traverse(top.left);
else if (top.right!=null)
traverse(top.right);
values.add(top.left);
values.add(top.right);
return top;
}
public static void main(String[] args){
BinaryOrderedTree top=new BinaryOrderedTree(7);
BinaryOrderedTree firstNode=new BinaryOrderedTree(6);
BinaryOrderedTree.addNode(firstNode,top);
BinaryOrderedTree secondNode=new BinaryOrderedTree(4);
BinaryOrderedTree.addNode(secondNode, top);
BinaryOrderedTree thirdNode=new BinaryOrderedTree(8);
BinaryOrderedTree.addNode(thirdNode, top);
BinaryOrderedTree fourthNode=new BinaryOrderedTree(3);
BinaryOrderedTree.addNode(fourthNode, top);
BinaryOrderedTree.traverse(top);
// System.out.println(BinaryOrderedTree.values);
}
}
This is the output I get
6
left
4
left
8
right
3
left
traversing pre-order
7
6
4
3
import java.util.ArrayList;
公共类BinaryOrderedTree{
左二元有序树;
二元有序树权利;
静态二元有序树顶;
int键;
静态ArrayList值=新ArrayList();
public int getKey(){
返回键;
}
公共void setTop(BinaryOrderedTree top1){
top=top1;
}
public BinaryOrderedTree getLeft(){
把这个还给我;
}
public BinaryOrderedTree getRight(){
归还这个。对;
}
公共二进制OrderedTree(int键){
这个。键=键;
}
公共静态BinaryOrderedTree addNode(BinaryOrderedTree节点,BinaryOrderedTree顶部){
if(node.getKey()top.getKey()){
if(右上==null){
System.out.println(node.getKey());
System.out.println(“右”);
右上=节点;
}
否则{
addNode(节点,右上角);
}
}
返回节点;
}
公共静态BinaryOrderedTree搜索节点(BinaryOrderedTree搜索,
BinaryOrderedTree(顶部){
if(search.getKey()==top.getKey()){
返回顶部;
}
else if(search.getKey()top.getKey()){
返回searchNode(搜索,右上角);
}
返回null;
}
公共静态BinaryOrderedTree遍历(BinaryOrderedTree顶部){
值。添加(顶部);
System.out.println(top.getKey());
if(左上角!=null)
横移(左上角);
else if(右上角!=null)
横移(右上方);
值。添加(左上角);
value.add(右上角);
返回顶部;
}
公共静态void main(字符串[]args){
BinaryOrderedTree top=新的BinaryOrderedTree(7);
BinaryOrderedTreeFirstNode=新的BinaryOrderedTree(6);
addNode(第一个节点,顶部);
BinaryOrderedTree secondNode=新的BinaryOrderedTree(4);
addNode(第二个节点,顶部);
BinaryOrderedTree thirdNode=新的BinaryOrderedTree(8);
addNode(第三个节点,顶部);
BinaryOrderedTreeFourthNode=新的BinaryOrderedTree(3);
addNode(第四个节点,顶部);
BinaryOrderedTree.traverse(顶部);
//System.out.println(BinaryOrderedTree.values);
}
}
这是我得到的输出
6.
左边
4.
左边
8.
正确的
3.
左边
遍历预序
7.
6.
4.
3.
我只能假设节点添加正确。但是,它无法在顶部节点的右侧显示节点,仅遍历左侧部分。是否有人可以指出该缺陷。删除右遍历中的
其他
:
if(top.left !=null)
traverse(top.left);
if (top.right!=null)
traverse(top.right);
顺便说一句,您的
值也可能会被奇怪地填充<代码>值。添加(顶部)
就足够了。删除那些值。添加(左上)
和值。添加(右上)
顺便说一句(还有一个)并不能真正帮助你理解你的代码