题目描述
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
给定的树 B:
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例 1:
示例 2:
1 2
| 输入:A = [3,4,5,1,2], B = [4,1] 输出:true
|
限制:
0 <= 节点个数 <= 10000
解法
- 先用先序遍历找到A中B的相等节点
- 再以这个节点为根节点开始判断两个树结构是否相等
- 如果结构不相等再继续寻找下一个相等节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import leetcode.TreeNode;
class Solution { public boolean isSubStructure(TreeNode A, TreeNode B) { if (B == null) { return false; } return search(A, B); }
public boolean search(TreeNode A, TreeNode B) { if (A == null) { return false; } if (A.val == B.val && compare(A, B)) { return true; } return search(A.left, B) || search(A.right, B);
}
public boolean compare(TreeNode A, TreeNode B) { if (B == null) { return true; } if (A == null) { return false; } return A.val == B.val && compare(A.left, B.left) && compare(A.right, B.right); } }
|
来源:力扣(LeetCode)
链接:剑指 Offer 26. 树的子结构 - 力扣(LeetCode)