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

posted on 2014-12-03 22:08  Yu's Garden  阅读(412)  评论(0编辑  收藏  举报

导航