【刷题库】剑指Offer_编程题第17题(JavaScript实现),树的子结构。

题目描述

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

时间限制:1秒      空间限制:32768K      热度指数:541328

本题知识点: 二叉树

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */

//这里判断是否是子树
function isHasSubtree(pRoot1, pRoot2){
    if(pRoot2 == null)return true; // 如果二叉树B已经遍历完,这说明是二叉树A的子树
    if(pRoot1 == null)return false; //如果二叉树A提前遍历完,这说明二叉树B不是二叉树A的子树
    if(pRoot1.val != pRoot2.val) return false; //只要期间出现结点不同就不符合
    return isHasSubtree(pRoot1.left, pRoot2.left) && isHasSubtree(pRoot1.right, pRoot2.right);  //这里遍历二叉树A和二叉树B所有的的结点
}

//在二叉树A中找到二叉树B的根结点
function HasSubtree(pRoot1, pRoot2)
{
    var is = false;  
    if(pRoot1 == null || pRoot2 == null) return false;   //题目要求,我们约定空树不是任意一个树的子结构,还可判断无寻找到相同节点,二叉树B的根结点。
    if(pRoot1.val == pRoot2.val) is = isHasSubtree(pRoot1, pRoot2); //调用判断子树函数
    if(!is) is = HasSubtree(pRoot1.left, pRoot2);  //向二叉树A左子树查找
    if(!is) is = HasSubtree(pRoot1.right, pRoot2);  //向二叉树A右子树查找
    return is;
}

猜你喜欢

转载自blog.csdn.net/weixin_42339197/article/details/100053399