详细解释Same Tree的解法

原题目:100. Same Tree

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.

Subscribe to see which companies asked this question

看了很多的博客,我都没有很好的理解,可能是我比较笨的原因吧,所以我在这里分享下我的解题思路。

1.改题目中提到两棵树是相同的树有两个条件,一个是结构相同,另外一个是节点上的数值是必须相等的。根据这个条件我有如下心理活动:

1)值相等,这个很容易理解。

2)结构相同是什么?我理解为:两个节点要不都为空,要不都有左右子树。

然后陷入了一个怪圈,最后写了一大堆无用的代码,虽然勉强通过了,但是在2)中其实我陷入了没有必要的思维误区中。针对于两个节点来说,左右子树都是针对于下一个节点了,在这里其实是递归的下一层了,不应该在这考虑的。针对二叉树的例子来说,我们关注的只要是这一层的节点就行了。

于是正确的思维逻辑应该是;

A:值相等。

B:这两个节点是否为空。递归考虑其子节点。

java的AC代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
       if (p == null && q == null)  
            return true;  
        else if (p == null || q == null)  
            return false;  
        return p.val == q.val && isSameTree(p.left, q.left)  
            && isSameTree(p.right, q.right); 
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值