572. Subtree of Another Tree ⭐

Medium
​
Given the roots of two binary trees root and subRoot, return true if there is a subtree of root with the same structure and node values of subRoot and false otherwise.
A subtree of a binary tree tree is a tree that consists of a node in tree and all of this node's descendants. The tree tree could also be considered as a subtree of itself.
Example 1:
​
​
Input: root = [3,4,5,1,2], subRoot = [4,1,2]
Output:
true
Example 2:
​
​
Input: root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
Output:
false
Constraints:
  • The number of nodes in the root tree is in the range [1, 2000].
  • The number of nodes in the subRoot tree is in the range [1, 1000].
  • -104 <= root.val <= 104
  • -104 <= subRoot.val <= 104
​

解題

/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isSubtree(root *TreeNode, subRoot *TreeNode) bool {
if root == nil {
return false
}
​
if isSame(root, subRoot) { return true }
​
return isSubtree(root.Left, subRoot) || isSubtree(root.Right, subRoot)
}
​
func isSame(root *TreeNode, subRoot *TreeNode) bool {
if root == nil && subRoot == nil { return true }
if root == nil || subRoot == nil { return false }
if root.Val != subRoot.Val { return false }
​
return isSame(root.Left, subRoot.Left) && isSame(root.Right, subRoot.Right)
}
​