将节点插入BST

时间:2015-12-31 01:43:09

标签: java algorithm tree binary-search-tree

我将节点插入BST的代码无效。当我尝试显示它时,它只显示树的最后两个节点,即它以某种方式覆盖树中的节点。我做错了什么?提前谢谢!

public Node Insert(int value)
    {
        Node newNode = new Node();
        newNode.data = value;
        newNode.left = null;
        newNode.right = null;

        if(root == null){
            root = newNode;
            return root;
        }
        else{
            while(root != null){
                if(root.data < value){
                    if(root.right != null){
                        root = root.right;
                    }
                    else{
                        root.right = newNode;
                        break;
                    }
                }
                else{
                    if(root.left != null){
                        root = root.left;
                    }
                    else{
                        root.left = newNode;
                        break;
                    }

                }
            }
            return root;
        }

    }
    public void inOrder(){
        inOrder(this.root);
    }
    private void inOrder(Node root){
        if(root != null){
            inOrder(root.left);
            System.out.println(root.data);
            inOrder(root.right);
        }
    }

2 个答案:

答案 0 :(得分:0)

root指向树的顶部节点。在你改变其价值的同时。您必须使用anoter变量(例如&#39; n&#39;)。

&#39; n&#39;的初始值是&#39; root&#39;。 在这段时间内你只使用&#39; n&#39;。

if(root == null){
        root = newNode;
        return root;
    }
    else{
        Node n = root;
        while(n != null){
        ...
        }
        return root;
        ...

您必须返回&#39; root&#39;而不是&#39; n&#39;,因为root不会改变。

答案 1 :(得分:0)

在代码中查看我的评论。希望它有所帮助。

parent(a,b).
parent(c,d).
parent(e,f).
  answer :-
    open('output.txt',write, Stream),
    (  write(Stream,parent(a,b)),fail   %%%%%% how to ?
   ;true
    ),
   close(Stream).