• 【剑指offer】17 树的子结构


    题目地址:树的子结构

    题目描述                                   

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

    题目示例                                   

    输入:
    {8,8,#,9,#,2,#,5},{8,9,#,2}
    返回值:
    true

    解法分析                                   

    首先找A中与B根节点相同的节点r,然后比较A中以r为根节点的子树是否包含B的结构。

    代码                                         

     1 function HasSubtree(pRoot1, pRoot2)
     2 {
     3     // write code here
     4     //按题干要求,当root1或root2为null的时候,直接返回false
     5     if(pRoot1 === null || pRoot2 === null){
     6         return false;
     7     }else{
     8         var res = false;
     9         //当A的此节点与B的根节点相同时,调用Does1has2()对比A中以r为根节点的子树是否包含B的结构
    10         if(pRoot1.val == pRoot2.val) res = Does1has2(pRoot1, pRoot2);
    11         //若此节点与B的根节点不相同,则用A的左儿子节点与B根节点进行对比
    12         if(!res) res = HasSubtree(pRoot1.left, pRoot2);
    13         //若此节点和A的左儿子都与B的根节点不相同,则用A的右儿子节点与B根节点进行对比
    14         if(!res) res = HasSubtree(pRoot1.right, pRoot2);
    15     }
    16     return res;
    17 }
    18 function Does1has2(node1, node2){
    19     //B遍历完都能一一对应,表明B是A的子结构,返回true
    20     if(node2 === null) return true;
    21     //B没遍历完A却遍历完了,表明B不是A的子结构,返回false
    22     if(node1 === null) return false;
    23     //如果有节点对应不上,返回false
    24     if(node1.val !== node2.val) return false;
    25     //此节点对应上了,递归调用Does1has2()来对比子节点
    26     return Does1has2(node1.left, node2.left) && Does1has2(node1.right, node2.right);
    27 }

    执行结果                                   

     
     
  • 相关阅读:
    .NET使用ICSharpCode.SharpZipLib压缩/解压文件
    在vs2005中使用AnkhSvn服务端IP改变无法连接
    repeater标签双重循环的使用
    在vs2005中使用SVN进行版本管理
    jmeter--响应断言
    jmeter--十三种断言方式介绍
    jmeter--参数化的四种方法
    jmeter--元件的作用域与执行顺序
    jmeter--使用badboy录制脚本
    jmeter--基本组件介绍
  • 原文地址:https://www.cnblogs.com/sunlinan/p/14293843.html
Copyright © 2020-2023  润新知