题目描述 树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路
- 递归判断当前节点是不是子树的开始节点,否则传入该节点的左右节点继续判断
- 在判断当前结点是否已经是子树的开始结点时,首先判断结点值是否相等,相等的话再判断各自的左右孩子是否也对应相等(此时要注意,子树可以先为空,但二叉树A不能先为空)
代码
class Solution {
public:
bool isSubTree(TreeNode* pRoot1, TreeNode* pRoot2){
if(!pRoot2) return true;
if(!pRoot1) return false;
if(pRoot1->val==pRoot2->val)
return isSubTree(pRoot1->left, pRoot2->left) && isSubTree(pRoot1->right, pRoot2->right);
else return false;
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(!pRoot1 || !pRoot2) return false;
return isSubTree(pRoot1,pRoot2) || isSubTree(pRoot1->left,pRoot2)||isSubTree(pRoot1->right, pRoot2);
}
};