zoukankan      html  css  js  c++  java
  • 子树

    有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。

    样例

    下面的例子中 T2 是 T1 的子树:

           1                3
          /               / 
    T1 = 2   3      T2 =  4
            /
           4
    

    下面的例子中 T2 不是 T1 的子树:

           1               3
          /                
    T1 = 2   3       T2 =    4
            /
           4
    
    注意

    若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同;

    解题思路:整体还是二叉树查找的思路,递归是二叉树各类题目中的万能方法;

     1 /**
     2  * Definition of TreeNode:
     3  * public class TreeNode {
     4  *     public int val;
     5  *     public TreeNode left, right;
     6  *     public TreeNode(int val) {
     7  *         this.val = val;
     8  *         this.left = this.right = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     /**
    14      * @param T1, T2: The roots of binary tree.
    15      * @return: True if T2 is a subtree of T1, or false.
    16      */
    17     public boolean isSubtree(TreeNode T1, TreeNode T2) {
    18         // write your code here
    19         if(T1 == null && T2 == null)   return true;
    20         if(T1 == null)  return false;
    21         if(T2 == null)  return true;
    22         boolean result = exit(T1,T2);
    23         if(result)   return true;
    24         boolean result2 = isSubtree(T1.left,T2);
    25         if(result2)   return true;
    26         boolean result3 = isSubtree(T1.right,T2);
    27         if(result3)   return true;
    28         return false;
    29     }
    30     boolean exit(TreeNode T3,TreeNode T2){
    31         if(T3 == null && T2 == null)   return true;
    32         if(T3 == null && T2 != null)  return false;
    33         if(T2 == null && T3 != null)  return false;
    34         if(T3.val != T2.val)  return false;
    35         boolean a = exit(T3.left,T2.left);
    36         boolean b = exit(T3.right,T2.right);
    37         if(a&&b)  return true;
    38         return false;
    39     }
    40 }
  • 相关阅读:
    2020年软件工程作业04
    2020年软件工程作业03
    2020年软件工程作业02
    2020年软件工程作业01
    计算机与软件工程 作业六
    计算机与软件工程 作业四
    计算机与软件工程 作业三
    计算机与软件工程 作业二
    计算机与软件工程作业一
    《402团队》:团队项目选题报告
  • 原文地址:https://www.cnblogs.com/wangnanabuaa/p/5008772.html
Copyright © 2011-2022 走看看