劍指offer17

/**
 * 輸入兩棵二叉樹A,B,判斷B是否是A的子結構。(ps:咱們約定空樹不是任意一個樹的子結構)
 * @author user
 * 思路:參考劍指offer一、首先設置標誌位result = false,
 * 由於一旦匹配成功result就設爲true,剩下的代碼不會執行,
 * 若是匹配不成功,默認返回false二、遞歸思想,若是根節點
 * 相同則遞歸調用DoesTree1HaveTree2(),若是根節點不相
 * 同,則判斷tree1的左子樹和tree2是否相同,再判斷右子樹和
 * tree2是否相同三、注意null的條件,HasSubTree中,若是兩
 * 棵樹都不爲空才進行判斷,DoesTree1HasTree2中,若是Tree2
 * 爲空,則說明第二棵樹遍歷完了,即匹配成功,tree1爲空有兩種
 * 狀況(1)若是tree1爲空&&tree2不爲空說明不匹配,(2)若是
 * tree1爲空,tree2爲空,說明匹配。
 */
 
public class ch17 {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        boolean result = false;
            if(root1 != null && root2 != null){
                if(root1.val == root2.val){
                    result = DoesTree1HaveTree2(root1,root2);
                }
                if(!result){result = HasSubtree(root1.left, root2);}
                if(!result){result = HasSubtree(root1.right, root2);}
            }
            return result;
    }
    public boolean DoesTree1HaveTree2(TreeNode root1,TreeNode root2){
            if(root1 == null && root2 != null) return false;
            if(root2 == null) return true;
            if(root1.val != root2.val) return false;
            return DoesTree1HaveTree2(root1.left, root2.left) && DoesTree1HaveTree2(root1.right, root2.right);
        }
}
相關文章
相關標籤/搜索