leetcode572. 另一个树的子树
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
示例 1:
给定的树 s:
3
/ \
4 5
/ \
1 2
给定的树 t:
4
/ \
1 2
返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
解法
写在注释里面了。
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
| class Solution { public boolean isSubtree(TreeNode s, TreeNode t) { traverse(s,t); return flag; } public boolean flag = false; public void traverse(TreeNode root, TreeNode t) { if (root == null || t == null) { return; } if (root.val == t.val) { flag = fun(root,t); } if (flag) return; traverse(root.left,t); if (flag) return; traverse(root.right,t); } public boolean fun(TreeNode r1, TreeNode r2) { if (r1 != null && r2 == null) { return false; } else if (r1 ==null && r2 != null) { return false; } else if (r1 == null && r2 == null) { return true; } else { if (r1.val != r2.val) { return false; } return (fun(r1.left,r2.left) && fun(r1.right,r2.right)); } } }
|
leetcode 95/100