题目:
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 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 每天进步一点点,不负青春
网友评论