class Solution: def isValidBST(self, root: Optional[TreeNode]) -> bool: res = [] def eval(node): if node.left: eval(node.left) res.append(node.val) if node.right: eval(node.right) if root: eval(root) for i in range(len(res) - 1): if res[i] >= res[i+1]: return False return True
class Solution: def isValidBST(self, root: Optional[TreeNode]) -> bool: res = [] stack = [] cur = root pre = float('-inf') while True: while cur != None: stack.append(cur) cur = cur.left if len(stack) == 0: break cur = stack.pop()
if cur.val <= pre: return False else: pre = cur.val cur = cur.right
return True
(来自 gpt)此外,也可以维护一个区间,通过递归判断一个节点是否在指定的范围中:
1 2 3 4 5 6 7 8 9 10
class Solution: def isValidBST(self, root: Optional[TreeNode]) -> bool: def validate(node, lower=float('-inf'), upper=float('inf')): if not node: return True if not (lower < node.val < upper): return False return (validate(node.left, lower, node.val) and validate(node.right, node.val, upper)) return validate(root)
class Solution: def getMinimumDifference(self, root: Optional[TreeNode]) -> int: res = [] stack = [] cur = root pre = None mindif = float('inf') while True: while cur != None: stack.append(cur) cur = cur.left if len(stack) == 0: break cur = stack.pop()
if pre != None: mindif = min(mindif, cur.val - pre) pre = cur.val cur = cur.right
class Solution: def findMode(self, root: Optional[TreeNode]) -> List[int]: maxcount = 0 count = 0 res = [] stack = [] cur = root pre = None while True: while cur!= None: stack.append(cur) cur = cur.left if len(stack) == 0: break cur = stack.pop()
if pre != None and pre == cur.val: count += 1 else: # 有新数字出现 or 第一个数字 count = 1
class Solution: def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]: stack = [] s = 0 cur = root while True: while cur: stack.append(cur) cur = cur.right if len(stack) == 0: break cur = stack.pop() s += cur.val cur.val = s cur = cur.left return root