问题:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路
- 在树A中找到跟树B根结点值一样的结点R
- 判断树A中以R为根结点的子树是否包含和树B一样的结构
代码实现
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
//找到根结点值相等的结点R
function HasSubtree(pRoot1, pRoot2)
{
// write code here
var result = false;
//A、B都不为空树
if(pRoot1 != null && pRoot2 != null){
if(pRoot1.val === pRoot2.val){
result = DoesTree1HasTree2(pRoot1, pRoot2);
}
//不包含,在左子树中找
if(!result){
result = HasSubtree(pRoot1.left, pRoot2);
}
if(!result){
result = HasSubtree(pRoot1.right, pRoot2);
}
}
return result;
}
//判断R的左右子树是否与B一样
function DoesTree1HasTree2(pRoot1, pRoot2){
if(pRoot2 === null){
return true;
}
if(pRoot1 === null){
return false;
}
if(pRoot1.val != pRoot2.val){
return false;
}
return DoesTree1HasTree2(pRoot1.left, pRoot2.left)
&& DoesTree1HasTree2(pRoot1.right, pRoot2.right);
}