题目:
输入两颗二叉树A和B,判断B是不是A的子结构。
答案:
递归
第一步,在树1中找到和树2的根结点的值一样的结点R
第二步,判断树1中以R为根结点的子树是不是包含和树2一样的结构。
public boolean isSubTree(TreeNode root1, TreeNode root2) {
if (root1 == null) {
return false;
}
if (root2 == null) {
return true;
}
boolean result = false;
if (root1.value == root2.value) {
result = doesTree1HasTree2(root1, root2);
}
if (!result) {
result = isSubTree(root1.left, root2);
}
if (!result) {
result = isSubTree(root1.right, root2);
}
return result;
}
private boolean doesTree1HasTree2(TreeNode root1, TreeNode root2) {
if (root1 == null) {
return false;
}
if (root2 == null) {
return true;
}
if (root1.value != root2.value) {
return false;
}
return doesTree1HasTree2(root1.left, root2.left) && doesTree1HasTree2(root1.right, root2.right);
}