zoukankan      html  css  js  c++  java
  • [Leetcode 6] 100 Same Tree

    Problem:

    Given two binary trees, write a function to check if they are equal or not.

    Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

    Analysis:

    Use a queue to do level order traversal is not proper in this problem since this method ignores the structure information of the tree. One possible way to deal with this problem is recursion. Starting from the root, 1. check the existance of nodes, if both are null, return true; One is null, the other is not, return false; 2. check the value equivalence, if not equal, return false, else recursively check their left and right children's equivalence.

    Then time complexity in worst case is O(2*min{m, n}) where we have to check all the nodes of smaller tree and corresponding nodes in the larger tree. The space complexity is O(n+m), where n is the size of the first tree and m is the size of the second tree.

    Code:

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public boolean isSameTree(TreeNode p, TreeNode q) {
    12         // Start typing your Java solution below
    13         // DO NOT write main() function
    14 
    15          if (p==null && q==null) 
    16               return true;
    17           else if ((p==null && q!=null) || (p!=null && q==null))
    18               return false;
    19           else if (p.val != q.val) 
    20               return false;
    21           else
    22               return (isSameTree(p.left, q.left)) 
    23                       && (isSameTree(p.right, q.right));
    24     }
    25 }

    Attention:

    Here is the first wrong implementation of this problem:

     1 /**
     2  * Definition for binary tree
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public boolean isSameTree(TreeNode p, TreeNode q) {
    12         // Start typing your Java solution below
    13         // DO NOT write main() function
    14 
    15         if (p==null && q==null) 
    16             return true;
    17         else if ((p==null && q!=null) || 
    18                     (q!=null && q==null)) 
    19             return false;
    20         else if (p.val != q.val) 
    21             return false;
    22         else
    23             return (isSameTree(p.left, q.left)) 
    24                     && (isSameTree(p.right, q.right));
    25     }
    26 }

    There is a typo in line 18, where the condition should be (p!=null && q==null), be careful while typing.

    Another thing is be careful with the comparision with null, it means that the given reference points to nothing, not the regerenced value is null. To check references value is equivalent or not, use ref1.equals(ref2) rather than ref1==ref2.

  • 相关阅读:
    ASP.NET Core -- 安装版
    基础知识系列☞各版本下IIS请求处理过程区别
    基础知识系列☞IList ←vs→ List
    005杰信-factory删除数据
    004杰信-关于formSubmit('factorycreate.action','_self')路径的疑惑
    23SpringMvc_各种参数绑定方式-就是<input那种
    003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理
    spring+springmvc+mybatis+maven整合
    22SpringMvc_jsp页面上的数据传递到控制器的说明
    002Jsp的内置对象
  • 原文地址:https://www.cnblogs.com/freeneng/p/3003335.html
Copyright © 2011-2022 走看看