给你一个二叉搜索树的根节点 root
,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
Python:利用二叉搜索树性质,进行中序遍历
# 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 getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.travelsal(root)
return self.ans
def __init__(self):
self.pre = None
self.ans = float('inf')
def travelsal(self, cur:TreeNode):
if not cur:
return
self.travelsal(cur.left)
if self.pre is not None:
self.ans = min(self.ans,cur.val - self.pre.val)
self.pre = cur
self.travelsal(cur.right)
给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
Python: 利用二叉搜索树性质(双指针)
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 __init__(self):
self.ans = []
self.max_count = 0
self.pre = None
self.count = 0
def findMode(self, root: Optional[TreeNode]) -> List[int]:
self.travelsal(root)
return list(set(self.ans))
def travelsal(self, cur: TreeNode):
if not cur:
return
self.travelsal(cur.left)
if self.pre is not None and cur.val == self.pre.val:
self.count += 1
else:
self.count = 1
if self.count == self.max_count:
self.ans.append(cur.val)
if self.count > self.max_count:
self.max_count = self.count
self.ans.clear()
self.ans.append(cur.val)
self.pre = cur
self.travelsal(cur.right)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
Python: 递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root:
return None
if root == p or root == q:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if left and right:
return root
if left and not right:
return left
if right and not left:
return right