子樹

有兩個不一樣大小的二進制樹: T1 有上百萬的節點; T2 有好幾百的節點。請設計一種算法,斷定 T2 是否爲 T1的子樹。算法

 注意事項

若 T1 中存在從節點 n 開始的子樹與 T2 相同,咱們稱 T2 是 T1 的子樹。也就是說,若是在 T1 節點 n 處將樹砍斷,砍斷的部分將與 T2 徹底相同。this

-----------------------******************-----------------------------spa

判斷兩棵樹是否相等的代碼設計

 1 bool same(TreeNode *T1, TreeNode *T2)
 2 {
 3     if(T1==NULL&&T2==NULL)
 4     return true;
 5     if(T1!=NULL&&T2!=NULL){
 6         if(T1->val==T2->val)
 7         {
 8             if(same(T1->left,T2->left)&&same(T1->right,T2->right))
 9                 return true;
10         }
11     }
12     return false;
13 }

判斷是否爲子樹的代碼code

 1     bool isSubtree(TreeNode *T1, TreeNode *T2) {
 2         // write your code here
 3       // write your code here
 4         if(!T2)  
 5             return true;  
 6         if(!T1)  
 7             return false;
 8         if(T1!=NULL&&T2!=NULL)
 9         {
10             if(same(T1,T2))
11             return true;
12             else
13                {
14                    if(isSubtree(T1->right,T2)||isSubtree(T1->left, T2))
15                    return true;
16             }
17         }
18         return false;
19     }

所有代碼:blog

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param T1, T2: The roots of binary tree.
     * @return: True if T2 is a subtree of T1, or false.
     */
    bool same(TreeNode *T1, TreeNode *T2)
    {
        if(T1==NULL&&T2==NULL)
        return true;
        if(T1!=NULL&&T2!=NULL){
            if(T1->val==T2->val)
            {
                if(same(T1->left,T2->left)&&same(T1->right,T2->right))
                    return true;
            }
        }
        return false;
    }
    bool isSubtree(TreeNode *T1, TreeNode *T2) {
        // write your code here
      // write your code here
        if(!T2)  
            return true;  
        if(!T1)  
            return false;
        if(T1!=NULL&&T2!=NULL)
        {
            if(same(T1,T2))
            return true;
            else
               {
                   if(isSubtree(T1->right,T2)||isSubtree(T1->left, T2))
                   return true;
            }
        }
        return false;
    }
};

雖然在lintcode上面是簡單題,可是對於一個小白來講仍是花費不少的時間,可是在作的過程當中更加理解了遞歸,仍是蠻值得的。遞歸

努力!   奮鬥!it

相關文章
相關標籤/搜索