061Valid Binary Search Tree 有效的二叉搜索树
给定二叉树的root ,如果它是有效的二叉搜索树,则返回true ,否则返回false 。
有效的二叉搜索树满足以下约束:
- 每个节点的左子树仅包含键小于该节点键的节点。
- 每个节点的右子树仅包含键大于该节点键的节点。
- 左右子树也是二叉搜索树。
示例1:
Input:root = [2,1,3]
Output: true
解题1:
这里需要注意的是,不能单独把每个节点只和他们的左右子树相比。因为如上图所示,4这个节点是小于父节点7的,但是再往上一级就是5,并没有大于5是不对的。所以我们在检查每个节点的时候,需要设立两个边界条件。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isValidBST(self, root: Optional[TreeNode]) -> bool:
def valid(node, left, right):
if not node:
return True
if not(node.val < right and node.val > left):
return False
return (valid(node.left, left, node.val) and
valid(node.right, node.val, right))
return valid(root, float("-inf"), float("inf"))
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
062 Kth Smallest Integer in BST BST 中的第 K 个最小整数
二叉搜索树满足以下约束:
- 每个节点的左子树仅包含键小于该节点键的节点。
- 每个节点的右子树仅包含键大于该节点键的节点。
- 左右子树也是二叉搜索树。
示例1:
Input:root = [2,1,3]
Output: 1
解题1: 堆栈
这里需要注意的是,不能单独把每个节点只和他们的左右子树相比。因为如上图所示,4这个节点是小于父节点7的,但是再往上一级就是5,并没有大于5是不对的。所以我们在检查每个节点的时候,需要设立两个边界条件。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
n = 0
stack = []
cur = root
while cur or stack:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
n += 1
if n == k:
return cur.val
cur = cur.right
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)