zoukankan      html  css  js  c++  java
  • [LeetCode] 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.

    另一个树的子树。

    题意是给两个树s和t,判断t是否是s的子树。如果s和t相同,也可以视为t是s的子树。

    这个题的思路跟100题same tree非常像。既然是问t是否是s的子树,那也就意味着s这棵树比t要大,或者最多相同,所以就可以按照100题的思路递归比较

    • s的左子树和右子树是否分别和t一样
    • s是否和t是相同的树

    时间O(n)

    空间O(n)

    Java实现

     1 class Solution {
     2     public boolean isSubtree(TreeNode s, TreeNode t) {
     3         if (s == null) {
     4             return false;
     5         }
     6         if (isSame(s, t)) {
     7             return true;
     8         }
     9         return isSubtree(s.left, t) || isSubtree(s.right, t);
    10     }
    11 
    12     private boolean isSame(TreeNode s, TreeNode t) {
    13         if (s == null && t == null) {
    14             return true;
    15         }
    16         if (s == null || t == null) {
    17             return false;
    18         }
    19         if (s.val != t.val) {
    20             return false;
    21         }
    22         return isSame(s.left, t.left) && isSame(s.right, t.right);
    23     }
    24 }

    JavaScript实现

     1 /**
     2  * @param {TreeNode} s
     3  * @param {TreeNode} t
     4  * @return {boolean}
     5  */
     6 var isSubtree = function (s, t) {
     7     if (s == null) {
     8         return false;
     9     }
    10     if (isSameTree(s, t)) {
    11         return true;
    12     }
    13     return isSubtree(s.left, t) || isSubtree(s.right, t);
    14 };
    15 
    16 var isSameTree = function (s, t) {
    17     if (s && t) {
    18         return s.val === t.val && isSameTree(s.left, t.left) && isSameTree(s.right, t.right);
    19     }
    20     return s === t;
    21 }

    相关题目

    100. Same Tree

    572. Subtree of Another Tree

    LeetCode 题目总结

  • 相关阅读:
    Ubuntu中设置永久的DNS
    Ubuntu上OpenStack DashBoard主题修改的方案
    OpenStack 控制台不能不能访问的问题
    树莓派2试玩
    SharpMap V1.1 For Web教程系列之——地图展示
    剑指offer12 矩阵中的路径
    flex布局中关键词整理
    浏览器缓存 强缓存 协商缓存整理
    二叉搜索树中第K小的元素
    leetcode cs-notes-树(一)【js】
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12468712.html
Copyright © 2011-2022 走看看