剑指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)