二叉树是否相同(递归版)
题目:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/same-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
看到这个题目我的第一反应还是递归,没办法,最近爱上了递归,陷入了无限真香循环,无法自拔。
我的思路是首先比较两个二叉树顶层节点,如果两个二叉树都为null,那么不用继续比较下去了,直接返回true。如果两个二叉树都不为null,那么对比一下二者的节点值,如果值相同,则不用理它们,如果不同的话,同样不用继续进行比较了,直接返回false。最后的最后,如果没有满足上面提到的三个return中任何一个的执行条件,那么将两个节点的左右子节点传入递归方法进行下一轮的对比。
最终,如果有任意两个位置的节点不同,则最终结果一定为false(详见代码)。
题解:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { return check(p, q); } public boolean check(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p != null && q != null) { if (p.val != q.val) { return false; } } else { return false; } return check(p.left, q.left) && check(p.right, q.right); } }