1
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 的值

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

对不起,我的英语不好

4

2 回答 2

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实例,并且将正确设置根节点。您的代码还有其他问题,但学习的一部分是实验。所以,继续,解决上面的问题,让我们知道它是怎么回事。

于 2013-03-02T21:21:04.607 回答
0

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

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

于 2013-05-05T16:01:00.277 回答