二叉搜索树生成器

时间:2014-07-28 18:29:35

标签: java tree binary-search-tree

我尝试构建二叉搜索树构建器方法。但是我觉得我错过了一些东西。我使用inOrderPrint方法和treeHeigh方法测试了我的方法。我的方法是如何工作的,根节点是第一个参数。第二个参数是另一个TreeNode node。此参数是TreeNode,该方法应将其自身重新排列为二叉搜索树。

我的inOrderPrint正在给我正确的打印,这让我认为我的buildBST正在运作。但是我的treeHeight方法没有给我正确的输出。我很确定我的inOrderPrinttreeHeight方法已正确创建。

我相信我的buildBST方法中缺少一些逻辑,但我似乎无法分辨它是什么。

我将root设置为14。 如果我将TreeNodes的值设置为5,10,3,20,50,25,40,1,2, 18, 100,101,我会得到这些数字的排序输出,但是treeHeight,当我期望7时,我得到5的输出。

有人能告诉我哪里出错了吗?

二进制搜索树生成器 代码:

public static void buildBST(TreeNode root, TreeNode node) {
        if (root == null) {
            node = root;
        } else {
            // less than root
            if (node.data < root.data) {
                if (root.left == null) {
                    root.left = node;
                } else {
                    buildBST(root.left, node);
                }
            }
            // greater than root
            if (node.data >= root.data) {
                if (root.right == null) {
                    root.right = node;
                } else {
                    buildBST(root.right, node);
                }
            }
        }
    }

inOrderPrint:

public static void inOrderPrint(TreeNode node) {
        if (node == null) {
            return;
        } else {
            inOrderPrint(node.left);
            System.out.println(node.data);
            inOrderPrint(node.right);
        }
    }

treeHeight:

public static int treeHeight(TreeNode node) {
        if (node == null) {
            return 0;
        } else {
            int Ldepth = treeHeight(node.left);
            int Rdepth = treeHeight(node.right);
            return Math.max(Ldepth, Rdepth) + 1;
        }
    }

2 个答案:

答案 0 :(得分:1)

                         14
                        /  \
                       5   20
                      /    /\
                     3    18 50
                    /        / \
                   1       25  100
                    \       \   \
                     2       40   101

身高是5。

答案 1 :(得分:0)

树的高度绝对是5.使用这个小工具很容易看到

http://algs4.cs.princeton.edu/GrowingTree/