用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);

顺便说一句,您的
值也可能会被奇怪地填充<代码>值。添加(顶部)
就足够了。删除那些
值。添加(左上)
值。添加(右上)


顺便说一句(还有一个)并不能真正帮助你理解你的代码