二叉搜索树均可采用中序遍历,转换为一个有序数组
# 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.vec = []
#中序遍历转换为有序数组
def traversal(self, root):
if root is None:
return
self.traversal(root.left)
self.vec.append(root.val)
self.traversal(root.right)
def getMinimumDifference(self, root: Optional[TreeNode]) -> int:
self.vec = []
self.traversal(root)
# 判断节点小于2的情况
if len(self.vec) < 2:
return 0
def_min = float('inf')
for i in range(1, len(self.vec)):
def_min = min(def_min, abs(self.vec[i] - self.vec[i-1]))
return def_min
使用中序遍历 + 字典
# 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.vec = []
def traversal(self, root):
if root is None:
return
self.traversal(root.left)
self.vec.append(root.val)
self.traversal(root.right)
def findMode(self, root: Optional[TreeNode]) -> List[int]:
self.vec = []
result = {}
self.traversal(root)
for vec in self.vec:
if vec not in result:
result[vec] = 1
else:
result[vec] += 1
mode = max(result.values())
mode_result = []
for val, cnt in result.items():
if cnt == mode:
mode_result.append(val)
return mode_result
该题目需要自底向上查找,左右中查找顺序能完成以上任务
再看此题
# 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, p, q):
if root == q or root == p or root is None:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
if left is not None and right is not None:
return root
if left is None and right is not None:
return right
elif left is not None and right is None:
return left
else:
return None