树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路
判断A树中当前结点是否与B树的根结点相同,如果不相同,接着遍历A树;如果相同,则A树从当前结点与B树从根结点开始同步遍历,直至B树遍历完且遍历过程中A、B两树对应结点都相同,则B树是A树的子结构;否则返回,重新在A树中寻找与B树根结点相同的结点,接着遍历。
代码(c++)
class Solution
{
public
:
bool
judge(TreeNode
* pRoot1
, TreeNode
* pRoot2
){
if(pRoot2
==NULL) return true
;
if(pRoot1
==NULL) return false
;
if(pRoot1
->val
!=pRoot2
->val
) return false
;
return judge(pRoot1
->left
,pRoot2
->left
) && judge(pRoot1
->right
,pRoot2
->right
);
}
bool
HasSubtree(TreeNode
* pRoot1
, TreeNode
* pRoot2
)
{
bool res
=false
;
if(pRoot1
!=NULL&&pRoot2
!=NULL){
if(pRoot1
->val
==pRoot2
->val
){
res
=judge(pRoot1
,pRoot2
);
}
if(res
==false
){
res
=HasSubtree(pRoot1
->left
,pRoot2
);
}
if(res
==false
){
res
=HasSubtree(pRoot1
->right
,pRoot2
);
}
}
return res
;
}
};