美文网首页
验证二叉搜索树

验证二叉搜索树

作者: _阿南_ | 来源:发表于2020-05-05 16:28 被阅读0次

    题目:

    给定一个二叉树,判断其是否是一个有效的二叉搜索树。
    假设一个二叉搜索树具有如下特征:
    节点的左子树只包含小于当前节点的数。
    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。
    示例 1:
    
    输入:
        2
       / \
      1   3
    输出: true
    示例 2:
    
    输入:
        5
       / \
      1   4
         / \
        3   6
    输出: false
    解释: 输入为: [5,1,4,null,null,3,6]。
         根节点的值为 5 ,但是其右子节点值为 4 。
    

    题目的理解:

    题目中的二叉搜索树描述的不清楚,应该表达为:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。
    然后采用后序搜索遍历整个二叉树。

    python实现

    class Solution:
        def isValidBST(self, root: TreeNode) -> bool:
            def recursion(node: TreeNode, result: bool) -> (bool, list):
                if result is False:
                    return result, list()
    
                if node is None:
                    return result, list()
    
                if node.left is None:
                    leftResult, leftNodeList = True, list()
                else:
                    leftResult, leftNodeList = recursion(node.left, result)
    
                if node.right is None:
                    rightResult, rightNodeList = True, list()
                else:
                    rightResult, rightNodeList = recursion(node.right, result)
    
                if leftResult is False or rightResult is False:
                    return False, list()
    
                print("leftNodeList is " + str(leftNodeList))
                print("rightNodeList is " + str(rightNodeList))
    
                matchLeft = True
                if len(leftNodeList) > 0:
                    if max(leftNodeList) >= node.val:
                        matchLeft = False
    
                matchRight = True
                if len(rightNodeList) > 0:
                    if node.val >= min(rightNodeList):
                        matchRight = False
    
                if matchLeft and matchRight:
                    leftNodeList.append(node.val)
                    return True, leftNodeList + rightNodeList
    
                return False, list()
    
            result, _ = recursion(root, True)
    
            return result
    

    想看最优解法移步此处

    提交

    ok

    成绩有点差,代码也很啰嗦,赶紧去看下题解,提升下。

    // END 每天进步一点点,不负青春

    相关文章

      网友评论

          本文标题:验证二叉搜索树

          本文链接:https://www.haomeiwen.com/subject/srnmghtx.html