判断一棵二叉树是否是另一个二叉树的子树,主要分为两个步骤:
首先由下图看出,当判断是否为子树时,需要判断每个节点的值是否相等
其次,如果相等的话,对于其左右子树是否相等也需要进行相同的判断,则可使用递归来完成。
需要注意的是,需要考虑边界的判断,如果子树为空的情况,或者只有一个子树的情况。
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool flag = false; if(pRoot1!=NULL&&pRoot2!=NULL) { if(pRoot1->val==pRoot2->val) flag = DoesTree1HasTree2(pRoot1,pRoot2); if(!flag) flag = HasSubtree(pRoot1->left,pRoot2); if(!flag) flag = HasSubtree(pRoot1->right,pRoot2); } return flag; } bool DoesTree1HasTree2(TreeNode* pRoot1,TreeNode* pRoot2) { if(pRoot2==NULL) return true; if(pRoot1==NULL) return false; if(pRoot1->val!=pRoot2->val) return false; return DoesTree1HasTree2(pRoot1->left,pRoot2->left)&& DoesTree1HasTree2(pRoot1->right,pRoot2->right); } };