zoukankan      html  css  js  c++  java
  • LeetCode: isSameTree1 解题报告

    isSameTree1

    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.

    SOLUTION 1 & SOLUTION 2:

    以下是递归及非递归解法:

    1. 递归解法就是判断当前节点是不是相同,及左右子树是不是相同树

    2. 非递归解法使用了先根遍历。这个算法比较简单一点

     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     // solution 1:
    12     public boolean isSameTree1(TreeNode p, TreeNode q) {
    13         if (p == null && q == null) {
    14             return true;
    15         }
    16         
    17         if (p == null || q == null) {
    18             return false;
    19         }
    20         
    21         return p.val == q.val &&
    22            isSameTree(p.left, q.left) &&
    23            isSameTree(p.right, q.right);
    24     }
    25     
    26     // Solution 2:
    27     public boolean isSameTree(TreeNode p, TreeNode q) {
    28         if (p == null && q == null) {
    29             return true;
    30         }
    31         
    32         if (p == null || q == null) {
    33             return false;
    34         }
    35         
    36         Stack<TreeNode> s1 = new Stack<TreeNode>();
    37         Stack<TreeNode> s2 = new Stack<TreeNode>();
    38         
    39         s1.push(p);
    40         s2.push(q);
    41         
    42         while (!s1.isEmpty() && !s2.isEmpty()) {
    43             TreeNode cur1 = s1.pop();
    44             TreeNode cur2 = s2.pop();
    45             
    46             // 弹出的节点的值必须相等 
    47             if (cur1.val != cur2.val) {
    48                 return false;
    49             }
    50             
    51             // tree1的right节点,tree2的right节点,可以同时不为空,也可以同时为空,否则返回false.
    52             if (cur1.left != null && cur2.left != null) {
    53                 s1.push(cur1.left);
    54                 s2.push(cur2.left);
    55             } else if (!(cur1.left == null && cur2.left == null)) {
    56                 return false;
    57             }
    58             
    59             // tree1的左节点,tree2的left节点,可以同时不为空,也可以同时为空,否则返回false.
    60             if (cur1.right != null && cur2.right != null) {
    61                 s1.push(cur1.right);
    62                 s2.push(cur2.right);
    63             } else if (!(cur1.right == null && cur2.right == null)) {
    64                 return false;
    65             }
    66         }
    67         
    68         return true;
    69     }
    70 }
    View Code

    GITHUB:

    https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/IsSameTree1.java

  • 相关阅读:
    Philosophy is systematic reflective thinking on life.
    HashMap与HashTable的区别、HashMap与HashSet的关系
    android Intent机制详解
    Android Parcelable理解与使用(对象序列化)
    Java并发编程:volatile关键字解析
    JavaEE 对象的串行化(Serialization)
    pytorch学习
    numpy的一些用法
    约瑟夫问题
    双向链表及其操作
  • 原文地址:https://www.cnblogs.com/yuzhangcmu/p/4141459.html
Copyright © 2011-2022 走看看