• 判断一颗二叉树是不是另外一颗的子结构


    这是一道比较经典的题目。我先是在百度的在线笔试中遇到,然后发现剑指Offer上有原题。当然题目并不完全一样不过大致相同。

    百度笔试是给你两个根节点判断第棵树是不是第一棵树的子树。剑指Offer是问你第二颗数是不是第一棵树的子结构(也就是说可是是第一棵二叉树的中间阶段)。

    笔试的时候恁是没完全通过测试案例,就差几个,实在也是不知道是什么问题。这次剑指Offer的在线测试中,发现他的描述不是很准确。我一开始以为空树是任何树的子结构,结果空树不是任何数的子结构。

    第一版代码:算法复杂度是O(M * N) ;M是第一棵树的元素个数,N是第二颗树的元素个数。

     1 /**
     2 public class TreeNode {
     3     int val = 0;
     4     TreeNode left = null;
     5     TreeNode right = null;
     6 
     7     public TreeNode(int val) {
     8         this.val = val;
     9 
    10     }
    11 
    12 }
    13 */
    14 public class Solution {
    15     public boolean HasSubtree(TreeNode root1,TreeNode root2) {
    16         
    17         if(root2 == null)
    18             return false;
    19         
    20         return DFS(root1, root2);
    21     }
    22     
    23     private boolean DFS(TreeNode root1, TreeNode root2) {
    24         
    25           if(root1 == null)
    26             return false;
    27         
    28         if(IsSubTree(root1, root2))
    29             return true;
    30         
    31         return HasSubtree(root1.left, root2) | HasSubtree(root1.right, root2);  
    32     }
    33     
    34     private boolean IsSubTree(TreeNode root1, TreeNode root2) {
    35         
    36         if(root2 == null)
    37             return true;
    38         else {
    39             if(root1 == null || root1.val != root2.val)
    40                 return false;
    41             return IsSubTree(root1.left, root2.left) & IsSubTree(root1.right, root2.right);
    42         }
    43         
    44     }
    45 }
  • 相关阅读:
    Centos 7升级gcc版本和CXXABI_1.3.8' not found错误解决
    Websphere缓存问题
    K8S中文官档地址
    可视化vscode安装matplotlib工具
    如何下载zoom上别人录制的视频?
    马士兵23设计模式
    DDD 领域驱动
    UPX手动脱壳/程序脱壳
    切换jdk环境d的n种办法
    近期ctf*web*一览
  • 原文地址:https://www.cnblogs.com/dsj2016/p/5522210.html
Copyright © 2020-2023  润新知