二叉樹-判斷一個樹是否包含另一個樹

1.題目:

給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹

2.題目分析:

前提:S樹不能爲空

(1)返回true;

(2)返回false;

3.程序設計

在S樹找到與T樹根節點值相等的節點,然後以該節點爲根節點產生的樹,判斷與T樹是否相等判斷相同樹(遞歸思想)

4.程序源代碼

//節點類
class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode(int x) { val = x; }
}

public class Main {
    /*1.找到t的根節點在s中的位置
    * 2.判斷兩顆二叉樹是否相同
    * */
    public boolean isSubtree(TreeNode s,TreeNode t){
        boolean flag = false;
        //遞歸的出口條件
        if(s != null){
            if(s.val == t.val){
                flag = isSameTree(s,t);
            }
            //此時s還未遍歷完,仍未找到s中爲t的根節點的值的節點
            //遞歸的從子樹中尋找
            if(!flag){
                flag = isSubtree(s.left,t) || isSubtree(s.right,t);
            }
        }
        return flag;
    }

    //判斷是否是相同樹
    public boolean isSameTree(TreeNode p,TreeNode q){
        if(p == null && q == null){
            return true;
        }
        if(p == null || q == null){
            return false;
        }
        if(q.val != p.val){
            return false;
        }
        //此時兩棵樹的根節點不爲空且兩棵樹的根節點值相等
        //此時去兩棵樹的子樹中去比較
        return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章