zoukankan      html  css  js  c++  java
  • 剑指offer[17]——树的子结构

    题目描述

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

    这里要注意子树子结构的概念,题目中所说的子结构是说只要B是A的一部分就可以。

    这道题我们只需要遍历A树,找到与B树的根节点val值相等的子节点,然后再判断该子节点下的子结构是否包含B树。

    以上图为例,我们遍历A树的时候找到其根节点的右子树根节点Cval值与B树根节点val值相等,于是我们就做进一步判断,节点C的左子树根节点val值与B树根节点左子树根节点val值相等,同时,节点C的右子树根节点val值与B树根节点右子树根节点val值相等,由于B树接下来已经没有节点,于是我们判断,B树是A树的子结构。

    /* function TreeNode(x) {
        this.val = x;
        this.left = null;
        this.right = null;
    } */
    function HasSubtree(pRoot1, pRoot2)
    {
        // 判空操作
        if(!pRoot1 || !pRoot2){return false;}
        // 寻找与B树的根节点val值相等的子节点
        function isEqual(root1, root2){
            if(!root2){return true;}
            if(root1 && root1.val == root2.val){
                return isEqual(root1.left, root2.left) && isEqual(root1.right, root2.right);
            }else{
                return false;
            }
        }
        // 判断寻找到的子节点下的子结构是否包含B树
        function isContain(root){
            if(!root){return false;}
            if(root.val == pRoot2.val && isEqual(root, pRoot2)){return true;}
            return isContain(root.left)||isContain(root.right);
        }
        return isContain(pRoot1);
    }
    
  • 相关阅读:
    BZOJ:4219: 跑得比谁都快 3007: 拯救小云公主
    BZOJ:4816: [Sdoi2017]数字表格
    BZOJ:4333: JSOI2012 智者的考验
    BZOJ:3911: SGU383 Caravans(三角剖分)
    bzoj:2595: [Wc2008]游览计划
    ZOJ3602:Count the Trees
    A Dangerous Maze (II) LightOJ
    Where to Run LightOJ
    Lights inside 3D Grid LightOJ
    Snakes and Ladders LightOJ
  • 原文地址:https://www.cnblogs.com/Jacob98/p/12469169.html
Copyright © 2011-2022 走看看