题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
基本思路
1、在A中查找与B树根节点值相同的节点M。
- 若相同,则判断以M节点为根的树与B树是否相同。若相同,则递归返回true;若不相同,则继续判断M节点左右子树中是否有相同的根节点。
- 若不相同,则继续在左右子树中递归寻找。
2、判断树是否相同的方法:通过递归法,子树相同,根节点相同,则树相同。
以下为解法:
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if (root1 == null || root2 == null) {
return false;
}
if (root1.val == root2.val) {
return (isSubtree(root1.left, root2.left) && isSubtree(root1.right, root2.right))
|| HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
} else {
return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
}
private boolean isSubtree(TreeNode root1, TreeNode root2) {
if (root2 == null) {
return true;
}
if (root1 == null) {
return false;
}
if (root1.val == root2.val) {
return isSubtree(root1.left, root2.left) && isSubtree(root1.right, root2.right);
} else {
return false;
}
}