树的子结构
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:两个递归函数,一个负责遍历树A;另一个负责判断由树A中某一个节点作为根节点的子树是否和树B结构一样
1 bool isSubTree(TreeNode *pRoot1, TreeNode *pRoot2) 2 { 3 if(pRoot2==NULL)return true; 4 if(pRoot1==NULL)return false; 5 if(pRoot1->val != pRoot2->val)return false; 6 return isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right); 7 } 8 void DFS(TreeNode *pRoot1, TreeNode *pRoot2, bool &result) 9 { 10 if(pRoot1->val == pRoot2->val) 11 { 12 bool flag=isSubTree(pRoot1, pRoot2); 13 if(flag) 14 { 15 result=true; 16 return; 17 } 18 } 19 if(pRoot1->left)DFS(pRoot1->left, pRoot2, result); 20 if(pRoot1->right)DFS(pRoot1->right, pRoot2, result); 21 } 22 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) 23 { 24 if(pRoot1==NULL || pRoot2==NULL)return false; 25 bool result=false; 26 DFS(pRoot1, pRoot2, result); 27 return result; 28 }