- 二叉树的最小深度
class Solution:
def minDepth(self, root: TreeNode) -> int:
if root is None:
return 0
if root.left is None and root.right is None:
return 1
mindepth = float('inf')
if root.left is not None:
mindepth = min(self.minDepth(root.left),mindepth)
if root.right is not None:
mindepth = min(self.minDepth(root.right),mindepth)
return mindepth + 1
- 二叉树的最近公共祖先
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root in (None,p,q):
return root
L = self.lowestCommonAncestor(root.left,p,q)
R = self.lowestCommonAncestor(root.right,p,q)
return R if L==None else L if R==None else root
DFS(后序遍历),深度优先搜索,就是一条路走到黑,走不通了就回溯换其他的路。
- 对称二叉树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if root is None:
return True
return self.issymmetric(root.left,root.right)
def issymmetric(self, node1, node2):
if node1 is None:
return (node2 is None)
if node2 is None:
return (node1 is None)
if node1.val!=node2.val:
return False
return self.issymmetric(node1.left,node2.right) and self.issymmetric(node1.right,node2.left)
镜像对称,转换为a树的左子树与b树的右字数对称,b树的左子树与a树的右字数对称,执行递归。