#Method1defisSameTree(self,p,q):ifnot p andnot q:returnTrueelifnot p ornot q:returnFalseelse:return p.val == q.val and self.isSameTree(p.left,q.left)and self.isSameTree(p.right,q.right)
对称树
defMirrorTree(self,root):#Method1 recursionifnot root:returnTruedefisMirror(root1,root2):ifnot root1 andnot root2:returnTrueif root1 and root2 and root1.val==root2.val:return isMirror(root1.left,root2.right)and isMirror(root1.right,root2.left)returnFalsereturn isMirror(root.left,root.right)#Method2 iteration
stack =[root]while stack:
nodes,ans =[],[]for x in stack:ifnot x:
ans.append(None)continue
ans.append(x.val)
nodes.append(x.left)
nodes.append(x.right)
stack = nodes
if ans!=ans[::-1]:returnFalsereturnTrue
deflowestCommonAncestor(self, root, p, q):if p.val<root.val and q.val<root.val:return self.lowestCommonAncestor(root.left,p,q)if p.val > root.val and q.val>root.val:return self.lowestCommonAncestor(root.right,p,q)return root
二叉树的所有路径
defbinaryTreePaths(self, root):
res =[]defdfs(root,tmp):ifnot root:returnifnot root.left andnot root.right:
res.append(tmp+[str(root.val)])
dfs(root.left,tmp+[str(root.val)])
dfs(root.right,tmp+[str(root.val)])
dfs(root,[])return['->'.join(x)for x in res]
defisSubtree(self, s: TreeNode, t: TreeNode)->bool:ifnot s andnot t:returnTrueifnot s and t ornot t and s:returnFalsereturn self.isSametree(s,t)or self.isSubtree(s.left,t)or self.isSubtree(s.right,t)defisSametree(self,x,y):ifnot x andnot y:returnTrueif(not x and y)or(x andnot y):returnFalseelse:return x.val==y.val and self.isSametree(x.left,y.left)and self.isSametree(x.right,y.right)