【问题标题】:Is this tree a binary search tree?这棵树是二叉搜索树吗?
【发布时间】:2017-07-03 14:14:50
【问题描述】:

我正在尝试解决二叉搜索树问题,但我无法通过所有测试用例。如果树是二叉搜索树,我需要返回 true,否则,我需要返回 false。我还需要检查重复项并确保右树中的每个值都大于根,并且左树中的每个值都小于根。

这是我要解决的hackerrank挑战,链接在这里:https://www.hackerrank.com/challenges/ctci-is-binary-search-tree

正如我在第一个问题中所建议的那样,Is tree a binary search tree? 这是不检查重复或右树中的每个值是否大于根的解决方案,左树也是如此。

对于重复,我知道如何解决它,但不确定如何检查值是否小于左侧树上的根,而右侧树上的值是否更大。

'''
class node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
'''

def checkBST(root):
    if root == None or (root.left == None and root.right == None):
        return True

    elif root.right == None:
        return root.left.data < root.data and checkBST(root.left)

    elif root.left == None:
        return root.right.data >= root.data and checkBST(root.right)

    return checkBST(root.left) and checkBST(root.right)

【问题讨论】:

  • 所以你希望我们解决这个hackerrank问题并给你代码?
  • 我不在乎它是 Hackerrank 还是其他什么,我正在尝试解决我在多次迭代中尝试过的二叉搜索树问题,并坚持检查左侧树上的较小值和较大的值正确的树。我在hackerrank上运行它,因为他们有很好的测试用例。不,这不是 stackoverflow.com/questions/6380231/… 的副本
  • 这是一个代码转储,其中包含我无法解决此问题的短语,请为我解决此问题

标签: python-3.x binary-search-tree


【解决方案1】:

清晰、简洁、高效的JAVA代码:如果你真正理解了递归,那么递归是很酷的。这个想法是验证树的每个节点,使其始终介于最小值和最大值之间。以 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));
}

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多