root在我的二叉树上总是仍然为null

时间:2013-01-22 15:08:17

标签: search tree

import java.io.*;

class treeNode {

    int data;
    treeNode left = null;
    treeNode right = null;
    treeNode parent = null;

    treeNode (int value)
    {
        data = value;
    }
}



class treeNodes {

    treeNode root = null;         

    void insert (treeNode node)
    {
        if (root == null) // the value of root is always null
        {           
            root = node;            
            return;
        }

        treeNode cur = null;
        treeNode father = null;

        while (cur != null)
        {
            father = cur;
            if (cur.data > node.data)
                cur = cur.left;
            else
                cur = cur.right;
        }

        if (father.data > node.data)
            father.left = node;
        else
            father.right = node;

        node.parent = father;
    }

    void walkInorder (treeNode n)
    {
        if (n == null)
            return;

        walkInorder (n.left);
        System.out.print (n.data + " ");
        walkInorder (n.right);
    }
}

class binarySearchTree {

    public static void main (String [] args) {   

        treeNodes obj1 = new treeNodes ( );     

        System.out.println ("============ Array Elements ============"); 

        int A[] = {3, 5, 7, 9, 8, 6};

        for (int i = 0; i < 6; i++)
        {
            treeNode node = new treeNode (A[i]);
            treeNodes obj = new treeNodes ( );
            obj.insert(node);                     
        }      

        System.out.println ("\n============ Inorder ============");
        System.out.println (obj1.root.data);
        obj1.walkInorder (obj1.root);        

    }
}

我试图制作二叉树,当我将第一个值发送到插入函数时,它应该改变root的值

在我的情况下,root永远不会改变,有人可以告诉我为什么以及如何解决它

抱歉我的英文不好

2 个答案:

答案 0 :(得分:1)

for循环中,对于数组中的每个项目,您将创建一个新的treeNodes实例。每当您创建新实例时,root都会设置为null 尝试对for循环进行以下更改:

    treeNodes obj = new treeNodes();

    for (int i = 0; i < 6; i++)
    {
        treeNode node = new treeNode(A[i]);            
        obj.insert(node);                     
    }

这样,循环的每一步都将使用相同的treeNodes实例,并且将正确设置根节点。您的代码还有其他问题,但学习的一部分是试验。所以,继续,解决上面的问题,让我们知道它是怎么回事。

答案 1 :(得分:0)

我猜上面的答案并不完全正确。是的,每当循环转到数组中的下一个元素时,您将创建一个新的treeNodes实例,但这意味着您只创建了一个只有一个元素的新树,因此根不会为null。 另一方面,你试图打印的根实际上是空的,但那是因为你没有在你想要打印的树中插入任何元素。 您试图按顺序遍历树OBJ1,并且您没有在此树中插入任何内容。你应该尝试按照树OBJ的顺序行走。

上面的答案是正确的,您需要进行修复,因此您只需将数组元素插入到一棵树中,然后解决此问题我解释过。