验证二叉搜索树

2020-05-05  本文已影响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 每天进步一点点,不负青春

上一篇下一篇

猜你喜欢

热点阅读