题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。
我们规定空树不是任何树的子结构。
样例
Input:
A树 B树
8 8
/ \ / \
8 7 9 2
/ \
9 2
/ \
4 7
Output: true
解题思路
-
普通思路
-
描述
将该题目与字符串匹配类比,使用最普通字符串匹配的方法处理该题目即可。
-
实现代码:
/* struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; } }; */ bool hasSubTree(TreeNode* pRoot1, TreeNode* pRoot2) // pRoot2是否为pRoot1的子结构 { if (!pRoot1 || !pRoot2) // 空树不是任何树的子结构 { return false; } if (isPart(pRoot1,pRoot2)) // 是子结构 { return true; } // 该语句属于遍历pRoot1所在树 return hasSubTree(pRoot1->left,pRoot2) || hasSubTree(pRoot1->right,pRoot2); } bool isPart(TreeNode* p,TreeNode* q) //具体判断q是否为p的子结构 { if (!q) // q为空,表明q是p的子结构 { return true; } if ((!p) || (p->val != q->val)) //p为空而q非空,或者两者当前值不等,表明不是 { return false; } // 只有左右子树均是,才是子结构 return isPart(p->left,q->left) && isPart(p->right,q->right); }
-