LeetCode算法题-Same Tree(Java实现)

这是悦乐书的第162次更新,第164篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第21题(顺位题号是100)。给定两个二叉树,编写一个函数来检查它们是否相同。如果两个二叉树在结构上相同并且节点具有相同的值,则认为它们是相的。例如:

输入:    1   1
        / \  / \
       2 3   2 3
[1,2,3],[1,2,3]
输出:true
输入:1   1
     /    \
    2      2
[1,2],[1,null,2]
输出:false

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 分析与解题

如果两个二叉树相同,那么两个二叉树的节点值肯定都要相同。从根节点一直到最后一个子节点,出现一个不相同的值,那么两个二叉树就不是相同的。当一个二叉树从根节点、左子节点、右子节点依次向下延伸的时候,每次获取到他们的值,然后再进行比较,如果相同,则继续找下一点节点进行比较,直到所有节点比较完。

每次进入下一个循环判断的时候,当前节点都是一个新的二叉树,可能是根节点,也可能是拥有子节点,所以我们可以借助递归的方法来解题。

public boolean isSameTree(TreeNode p, TreeNode q) {
    if (p == null || q == null) {
        return p == q;
    }
    boolean f = p.val == q.val;
    boolean f2 = isSameTree(p.left, q.left);
    boolean f3 = isSameTree(p.right, q.right);
    return f && f2 && f3;
}

03 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

posted @ 2018-11-05 08:21  程序员小川  阅读(359)  评论(0编辑  收藏  举报