剑指offer 子树结构

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    /*两步走:1.找到跟节点 2.判断子树相同否*/
    bool IsSame(TreeNode* pRoot1, TreeNode* pRoot2){
        if(pRoot2 == NULL) return true;
        if(pRoot1 == NULL) return false;
        if(pRoot1->val == pRoot2->val){
           return IsSame(pRoot1->left,pRoot2->left)&&IsSame(pRoot1->right,pRoot2->right);
               
        }
        else 
            return false;
        
        
    }
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        bool result=false;
        if((pRoot1==NULL )||(pRoot2==NULL) ) return false;
        if(pRoot1->val == pRoot2->val){
           if(IsSame(pRoot1,pRoot2))
               return true;
                
        }
        if(result == false)
            result = HasSubtree(pRoot1->left,pRoot2);
      
         if(result == false)
            result = HasSubtree(pRoot1->right,pRoot2);
      
        return result;

    }
};

注意: 判断指针p是否为空时不能用 if(p) 要用 if(p !==null)  

posted @ 2016-06-21 16:27  mokayy  阅读(124)  评论(0编辑  收藏  举报