題目:
輸入兩顆二叉樹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);
}