題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
思路
第一步:在樹A中找到和樹B的節點一樣的節點R
第二部:判斷樹A以R爲根節點的子樹是不是包含樹B一樣的結構
package tree;
/*
樹的子結構
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)
*/
public class HasSubtree_17 {
//遍歷大樹
public boolean HasSubtree(TreeNode_17 root1,TreeNode_17 root2) {
if (root1 == null || root2 == null) {
return false;
}
//如果找到與子樹相同根的值,走判斷方法
if (root1.val == root2.val) {
if (judge(root1, root2)) {
return true;
}
}
//遍歷左孩子,右孩子
return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}
//判斷是否是子結構
public boolean judge(TreeNode_17 root, TreeNode_17 subtree) {
//子結構已經循環完畢,代表全部匹配
if(subtree == null){
return true;
}
//大樹已經循環完畢,並未成功匹配
if (root == null) {
return false;
}
//相等後判斷左右孩子
if (root.val == subtree.val) {
return judge(root.left, subtree.left) && judge(root.right, root.right);
}
return false;
}
}