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:
root
tree is in the range [1, 2000]
.subRoot
tree is in the range [1, 1000]
.-10^4 <= root.val <= 10^4
-10^4 <= subRoot.val <= 10^4
每個兩個樹的根結點root, subRoot
題目要實作一個演算法去察看 subRoot 是不是 root 的 subTree
subRoot 是 root 的 subTree 有以下幾種狀況
要檢驗 subRoot tree與 root tree是否相等有幾個條件
1 root 是空的時候 , subRoot 必須是空
2 root 非空, root 的 Tree 與 subRoot 的 Tree 相等
2 root 非空, subRoot 的 Tree 是 root.left Tree 的 subTree
3 root 非空, subRoot 的 Tree 是 root.right Tree 的 subTree
/**
* 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 subRoot == nil
}
return IsEqual(root, subRoot)||isSubTree(root.Left, subRoot)||isSubTree(root.Right, subRoot)
}
func IsEqual(root *TreeNode, subRoot *TreeNode) bool {
if root == nil {
return subRoot == nil
}
if subRoot != nil {
if root.Val != subRoot.Val {
return false
}
return IsEqual(root.Left, subRoot.Left)&&IsEqual(root.Right, subRoot.Right)
} else {
return false
}
}