剑指Offer JZ17 树的子结构(JavaScript:树)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:835589
本题知识点: 二叉树 树

题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
示例1
输入
{8,8,#,9,#,2,#,5},{8,9,#,2}
返回值
true

思路:
碰到树都是递归,递归函数判断当子树递归到null时,则true,因为子树已经递归完了;否则判断与子树与父树是否相同,不同则false;若左子树和右子树都相同,则继续比较。

父函数需要用来做确定起始点,判断父树根节点和子树根节点,父树左节点和子树根节点,父树右节点和子树根节点;然后开始递归

function HasSubtree(pRoot1, pRoot2) {
    
    
    if (!pRoot1 || !pRoot2) return false
    return isSub(pRoot1, pRoot2) || HasSubtree(pRoot1.left, pRoot2) || HasSubtree(pRoot1.right, pRoot2)
}

function isSub(p1, p2) {
    
    
    if (!p2) return true
    if (!p1||p1.val !== p2.val) return false
    return isSub(p1.left, p2.left) && isSub(p1.right, p2.right)
}

答案参考自:请叫我斗图王

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/114647313