【加国FB面试高频题】LeetCode 572 子树问题Python最优解来啦!附逐行解析![]()
各位算法er看过来!
今天拆解一道加拿大Facebook面试必刷题——LeetCode 572「另一棵树的子树」![]()
问题描述:
给定两棵二叉树root和subRoot,判断subRoot是否是root的子树(相同结构和节点值)
Python最优解(DFS + 双重递归):
def isSubtree(root, subRoot):
if not subRoot: return True
if not root: return False
return (isSameTree(root, subRoot)
or isSubtree(root.left, subRoot)
or isSubtree(root.right, subRoot))
def isSameTree(p, q):
if not p and not q: return True
if not p or not q: return False
return (p.val == q.val
and isSameTree(p.left, q.left)
and isSameTree(p.right, q.right))
复杂度分析:
- 时间复杂度:O(m×n) → m/n分别为两棵树节点数
- 空间复杂度:O(max(m,n)) → 递归栈深度
面试技巧:
先写出isSameTree辅助函数(面试官常考基本功)
主函数递归时注意or的短路特性优化效率
可以画图说明case:root=, subRoot=
同类型拓展题:
- LeetCode 100「相同的树」
- LeetCode 101「对称二叉树」
最近在准备北美大厂面试的童鞋,欢迎在评论区交流心得呀~
下期预告:FB常考的图论BFS套路! #算法面试 #Python刷题 #加拿大科技岗