zoukankan      html  css  js  c++  java
  • 572. Subtree of Another Tree 大树里包括小树

    [抄题]:

    Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

    Example 1:
    Given tree s:

         3
        / 
       4   5
      / 
     1   2
    

    Given tree t:

       4 
      / 
     1   2
    

    Return true, because t has the same structure and node values with a subtree of s.

    Example 2:
    Given tree s:

         3
        / 
       4   5
      / 
     1   2
        /
       0
    

    Given tree t:

       4
      / 
     1   2
    

    Return false.

     [暴力解法]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    1. 两个直接相等是两棵树相等的特殊情况,下次注意

    [思维问题]:

    只会写判断树的思路,不知道还有判断的步骤, 二者需要分开

    [一句话思路]:

    判断树和判断点分开

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 布尔型函数必须有不在括号中的默认值,注意下
    2. 调用点的traverse也是用的递归

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    1. 调用点的traverse也是用的递归

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [关键模板化代码]:

    判断点是否相等:必须要左右都相等才行

    public boolean isSame(TreeNode s, TreeNode t) {
            //both null
            if (s == null && t == null) {
                return true;
            }
            //one is null
            if (s == null || t == null) {
                return false;
            }
            //false
            if (s.val != t.val) {
                return false;
            }
            //default
            return isSame(s.left, t.left) && isSame(s.right, t.right);
        }

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isSubtree(TreeNode s, TreeNode t) {
            //corner case
            if (s == null) {
                return false;
            }
            if (isSame(s,t)) {
                return true;
            }
            return isSubtree(s.left, t) || isSubtree(s.right, t);
        }
        
        public boolean isSame(TreeNode s, TreeNode t) {
            //both null
            if (s == null && t == null) {
                return true;
            }
            //one is null
            if (s == null || t == null) {
                return false;
            }
            //false
            if (s.val != t.val) {
                return false;
            }
            //default
            return isSame(s.left, t.left) && isSame(s.right, t.right);
        }
    }
    View Code
  • 相关阅读:
    NBUT 1120 Reimu's Teleport (线段树)
    NBUT 1119 Patchouli's Books (STL应用)
    NBUT 1118 Marisa's Affair (排序统计,水)
    NBUT 1117 Kotiya's Incantation(字符输入处理)
    NBUT 1115 Cirno's Trick (水)
    NBUT 1114 Alice's Puppets(排序统计,水)
    188 Best Time to Buy and Sell Stock IV 买卖股票的最佳时机 IV
    187 Repeated DNA Sequences 重复的DNA序列
    179 Largest Number 把数组排成最大的数
    174 Dungeon Game 地下城游戏
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8592222.html
Copyright © 2011-2022 走看看