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);
    }
    
  • 相关阅读:
    扩展方法 之 Asp.Net篇【转】
    PowerDesiGner数据库设计
    DataFormatString格式化字符串的总结
    C#序列化对象为XMl于反序列化
    c# 反射初探【转】
    事件驱动的javascript 【转】
    每日一题力扣598
    每日一题力扣283
    每日一题力扣189数组的旋转 取模这个想法好棒!
    每日一题力扣119杨辉三角
  • 原文地址:https://www.cnblogs.com/Jacob98/p/12469169.html
Copyright © 2011-2022 走看看