572. Subtree of Another Tree
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.
Example 1:
Given tree s:
3 / \ 4 5 / \ 1 2Given tree t:
4 / \ 1 2Return true, because t has the same structure and node values with a subtree of s.
Example 2:
Given tree s:
3 / \ 4 5 / \ 1 2 / 0Given tree t:
4 / \ 1 2Return false.
思路:
1 写一个判断树是否相同的函数
2 递归的判断当前树节点是否相同。
# 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 isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: if p == None and q == None: return True elif p == None and q: return False elif p and q == None: return False else: if p.val != q.val: return False return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right) def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: if root == None: return False if self.isSameTree(root,subRoot): return True return self.isSubtree(root.left,subRoot) or self.isSubtree(root.right,subRoot)
1 class Solution { 2 public boolean isSubtree(TreeNode s, TreeNode t) { 3 if(s == null) return false; 4 if(isSame(s,t)) return true; 5 return isSubtree(s.left,t) || isSubtree(s.right,t); 6 } 7 public boolean isSame(TreeNode s, TreeNode t) { 8 if(s == null && t == null) return true; 9 if(s == null || t == null) return false; 10 11 if(s.val != t.val) return false; 12 13 return isSame(s.left,t.left) && isSame(s.right,t.right); 14 15 } 16 }