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);
    }
    
  • 相关阅读:
    使用HttpClient发送请求、接收响应
    jdbc操作
    数据库通用Jdbc操作
    将WSDL文件生成的Java文件
    数据结构_线性表_链表实现
    15年第六届蓝桥杯第七题_手链样式_(stl_string)
    16年第七届蓝桥杯第九题_密码脱落_(贪心)
    16年第七届蓝桥杯第七题_剪邮票
    16年第七届蓝桥杯第三题_方格填数
    Codeforces_789C_(dp)
  • 原文地址:https://www.cnblogs.com/Jacob98/p/12469169.html
Copyright © 2011-2022 走看看