子树

判断T2是否是T1的子树,分为以下几种情况:

1:T 2是空,结果必为真;

2:T1是空,结果必为假;(包括T1,T 2同为真)

3:T1,T2都不为空,判断T2的值是否等于T1的根节点的值:是→递归判断T1和T2的左右子树是否一样,直到T2结束。

                                                                                                  否→判断T2是否和T1的左子树或者右子树一样,递归到结束。

 bool isSubtree(TreeNode * T1, TreeNode * T2) {
        // write your code here
 bool result  = false;  
        if (T2 == NULL) {return true;} //T2为空,不管T1有没有,都是真
        if (T1 == NULL) {return false;} //T1位空,结果必为假
        if (T1->val == T2->val) {result = dp(T1,T2);}  //根节点相同
        if (!result) {result =  isSubtree(T1->left,T2);} //根节点不相同,判断T1的左子树的根节点是否与T2根节点相同 
        if (!result) {result =  isSubtree(T1->right,T2);} //同上 
        return result;}  
    bool dp (TreeNode *T1, TreeNode *T2) 
    {
        if (T1 != NULL && T2!=NULL && T1->val == T2->val) 
        {  
            return dp(T1->left,T2->left) && dp (T1->right,T2->right);  
            
        }  //两树都不为空,递归
        if (T1 == NULL && T2 == NULL) {return true;}//两树都是空  
        return false;  
    }

posted on 2017-10-18 21:25  20153868  阅读(211)  评论(0)    收藏  举报

导航