[Leetcode 6] 100 Same Tree

检查两个二叉树是否相等:Java实现与错误案例
本文介绍了如何使用递归方法检查两个二叉树是否结构和节点值都相等,包括代码实现及一个常见的错误案例分析。

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.

转载于:https://www.cnblogs.com/freeneng/archive/2013/04/07/3003335.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值