【问题标题】:Try to check if Tree is Binary Search Tree尝试检查 Tree 是否为二叉搜索树
【发布时间】:2013-12-12 15:35:42
【问题描述】:

首先,我根据级别顺序(又名广度优先)遍历将树插入到数组中。 现在我检查数组

 For i=1 to Len(Array) do:
         IF 2*i smaller than Len(Array) then:
            IF Array[i] smaller than Array[2i] OR Array[i] larger than  Array[2i+1] then:
                 Return false
         Else if 2*I larger than Len(Array) then 
            Return True

但我的问题是算法只有在树是完全二叉树时才有效

【问题讨论】:

    标签: algorithm tree binary-tree binary-search-tree


    【解决方案1】:

    作为提示,二叉树是二叉搜索树当且仅当树的中序遍历以排序顺序列出键。尝试从逐级遍历切换到中序遍历并进行适当的修改。

    希望这会有所帮助!

    【讨论】:

    • ,抱歉,我修复了它——我有最大堆而不是 BST,我需要检查这是否真的是最大堆我尝试在数组的帮助下做到这一点你有其他想法吗?
    • 在我发布此答案后,您通过将问题从关于 BST 的问题更改为关于最大堆的问题,彻底编辑了问题。如果你想问这个关于堆的问题,我建议将它作为一个单独的问题发布。如果你在得到答案后完全改变了问题,那么人们不会很愿意帮助你。
    • 对不起,我是新来的,我写了新问题,谢谢你的信息
    【解决方案2】:

    清晰、简洁、高效的代码:如果你真正理解了递归,那么递归是很酷的。这个想法是验证树的每个节点,使其始终介于最小值和最大值之间。以 Integer.MIN_VALUEInteger.MAX_VALUE 作为最小值和最大值的初始输入。

    public boolean isBinarySearch(Node root, int min, int max) {
    
        if (root == null)
            return true;
    
        return ((min <= root.val && root.val <= max) && (isBinarySearch(
                root.left, min, root.val) && isBinarySearch(root.right,
                root.val, max)));
    } 
    

    你也可以试试这个。

    class Node {
    
    public Node left;
    public Node right;
    public int val;
    
    public Node(int val) {
        this.val = val;
     }
    }
    

    现在执行此操作。

        Node root2 = new Node(12);
        root2.left = new Node(7);
        root2.left.left = new Node(4);
        root2.left.right = new Node(11);
        root2.right = new Node(16);
        root2.right.left = new Node(14);
        root2.right.right = new Node(18);
        root2.right.right.left = new Node(17);
    
        System.out
                .println("IsBinary="
                        + wc.isBinarySearch(root2, Integer.MIN_VALUE,
                                Integer.MAX_VALUE));
    }
    

    【讨论】:

    • 遗憾的是,没有明确的问题。当您回答标题时,隐含的问题可能是使我的方法适用于非完整二叉树的最小更改是什么? - 很难与没有出现的用户分辨至少三年。
    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2021-10-01
    • 2020-04-07
    • 1970-01-01
    • 2018-05-16
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多