算法之输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

本文介绍了一种算法,用于判断一棵二叉树是否为另一棵二叉树的子结构。通过递归比较节点值,检查子树是否完全匹配,实现了高效准确的子树查找。

思路

  1. 首先判断两棵树是否为空,如果其中一颗为空,直接返回false,如果不为空,继续
  2. 判断 A 树根节点和 B 树跟节点是否相同,如果相同,判断 B 是否有孩子,如果没有孩子,直接返回 true;如果有孩子,判断其左右子树与 A 是否相同,如果左右子树相同,返回true,如果不同,返回false;如果跟节点不同,判断 A 的左右子树是否有和 B 根节点相同的结点,如果有,递归判断,如果没有,返回 false。
/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function HasSubtree(pRootA, pRootB)
{
    // write code here
    if (!pRootA  || !pRootB) return false;
    return isSubtree(pRootA, pRootB) || HasSubtree(pRootA.left, pRootB) || HasSubtree(pRootA.right, pRootB);
}
function isSubtree(rootA, rootB) {
    if (!rootB) {
        return true;
    }
    if (!rootA) {
        return false;
    }
    if (rootA.val === rootB.val) {
        return isSubtree(rootA.left, rootB.left) && isSubtree(rootA.right, rootB.right);
    } else {
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值