【问题标题】:InOrder traversing in a generic Binary Tree JavaInOrder 在通用二叉树 Java 中遍历
【发布时间】:2020-06-27 18:23:41
【问题描述】:

我必须使用一种按升序打印树中所有值的方法来编写树。所以我按顺序选择遍历算法。它也必须是递归的。我在互联网上搜索了 2 天来解决这个问题。在这之后我写了这个方法。

我的输入是:20,19,13,15,7,28,4,23,9
所以输出必须是:4,7,9,13,15,19,20,23,28
但我的输出是:4 9 7 15 13 19 20 28 23

为什么?

这是你需要的部分代码

    class Tree<V extends Comparable<V>> {
    
        class TreeNode {
            V val;
            TreeNode left, right;
    
            TreeNode(V v) {
                val = v;
            }
        }

    TreeNode root; 

       void insert (V val) {
            if (root == null)
                root = new TreeNode(val);
            else
                insert(root, val);
            // TODO implement this method
        }
    
        private void insert (TreeNode parent, V val) {
            TreeNode t = root;
            int cmp = val.compareTo(t.val);
            if (cmp >= 0) {
                if (parent.left == null)
                    parent.left = new TreeNode(val);
                else
                    insert(parent.left, val);
            }
            else {
                if (parent.right == null)
                    parent.right = new TreeNode(val);
                else
                    insert(parent.right, val);
            }
        }

    // - to print all values in the tree in ascending order
        void printNodesAll () {
            printNodesAll(root);
        }
    
        private void printNodesAll (TreeNode node){
            if (node == null)
                return;
            else {
                printNodesAll(node.right);
                System.out.printf("%s ", node.val);
                printNodesAll(node.left);
            }
        }

        public static void main(String[] args) {
            Tree <Integer> names = new Tree <>();
            names.insert(20);
            names.insert(19);
            names.insert(13);
            names.insert(15);
            names.insert(7);
            names.insert(9);
            names.insert(4);
            names.insert(28);
            names.insert(23);
    
            names.printNodesAll();
    
        }
    }
}

【问题讨论】:

    标签: java generics binary-search-tree inorder


    【解决方案1】:

    问题在于您的 insert 函数。特别是这一行:

    TreeNode t = root;
    int cmp = val.compareTo(t.val);
    

    这意味着您的所有插入都将针对根节点进行评估,而不是递归调用的父节点。通过将这些行更改为只是

    int cmp = val.compareTo(parent.val);
    

    比较有效

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2022-11-11
      • 2010-12-30
      • 1970-01-01
      相关资源
      最近更新 更多