Question
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。
关键词:二叉树 子结构
Solution
遍历递归
如果A树当前节点与B根节点值相同,判断A树是否接下来也与B树结构完全相同(另一个函数递归判定),直到遍历A树所有结点。
- Python
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
if pRoot1 and pRoot2:
if pRoot1.val == pRoot2.val and self.sameTree(pRoot1,pRoot2):
return True
if self.HasSubtree(pRoot1.left, pRoot2):
return True
if self.HasSubtree(pRoot1.right, pRoot2):
return True
return False
def sameTree(self, r1, r2):
if not r2:
return True
if not r1 or r1.val != r2.val:
return False
return self.sameTree(r1.left, r2.left) and self.sameTree(r1.right, r2.right)
- C++
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1!=NULL and pRoot2!=NULL){
if((pRoot1->val == pRoot2->val) && (sameTree(pRoot1, pRoot2)))
return true;
if(HasSubtree(pRoot1->left, pRoot2))
return true;
if(HasSubtree(pRoot1->right, pRoot2))
return true;
}
return false;
}
bool sameTree(TreeNode* p1, TreeNode* p2)
{
if (!p2)
return true;
if((!p1) || (p1->val != p2->val))
return false;
return ((sameTree(p1->left, p2->left)) && (sameTree(p1->right, p2->right)));
}
};