• 019 树的子结构


    1.题目

      输入两棵二叉树A和B,判断B是不是A的子结构。

    2.分析

      1)先对A树进行遍历,找到与B树的根结点值相同的结点R;

      2)判断A树中以R为根结点的子树是否包含B树一样的结构。

    3.测试用例

      1.功能测试(A、B为普通二叉树;B是或者不是A树的子结构)

      2.特殊测试(任意一个或者两个树的根结点为null;左斜树;右斜树)

    4.程序

     1 package first;
     2 
     3 public class SubstructureInTree {
     4     /*
     5      * 主程序,对每个结点遍历判断
     6      */
     7     public boolean hasSubtree(TreeNode root1,TreeNode root2) {
     8         if(root1==null || root2==null)
     9             return false;
    10         //上面几行可以直接写成:
    11         return doesTree1HasTree2(root1, root2)|| hasSubtree(root1.left, root2)
    12                 ||hasSubtree(root1.right, root2);
    13     }
    14 
    15     /*
    16      * 判断root结点开始的子树中各个结点是否相同
    17      */
    18     private boolean doesTree1HasTree2(TreeNode root1,TreeNode root2) {
    19         if(root2==null) return true;
    20         if(root1==null) return false;
    21         return equal(root1.val, root2.val) && doesTree1HasTree2(root1.left, root2.left) && doesTree1HasTree2(root1.right, root2.right);
    22     }
    23 
    24     /*
    25      * 判断两个浮点数是否相等
    26      */
    27     private boolean equal(double num1,double num2) {
    28         if(num1-num2<0.0000001 && num1-num2>-0.0000001 )
    29             return true;
    30         return false;
    31     }
    32 }
  • 相关阅读:
    idea2020 安装
    739. 每日温度
    图像翻转
    257. 二叉树的所有路径
    1466. 重新规划路线
    面试题 04.05. 合法二叉搜索树
    671. 二叉树中第二小的节点
    965. 单值二叉树
    648. 单词替换
    137. 只出现一次的数字 II
  • 原文地址:https://www.cnblogs.com/juncaoit/p/10495945.html
Copyright © 2020-2023  润新知