100.相同的树 - 图1

1.题目

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例:

  1. 输入: 1 1
  2. / \ / \
  3. 2 3 2 3
  4. [1,2,3], [1,2,3]
  5. 输出: true
  6. 输入: 1 1
  7. / \
  8. 2 2
  9. [1,2], [1,null,2]
  10. 输出: false
  11. 输入: 1 1
  12. / \ / \
  13. 2 1 1 2
  14. [1,2,1], [1,1,2]
  15. 输出: false

2.思路

要比较二叉树的结构与节点是否完全相同,我们先看给定二叉树的实现:

  1. class TreeNode {
  2. int val;
  3. TreeNode left;
  4. TreeNode right;
  5. TreeNode() {
  6. }
  7. TreeNode(int val) {
  8. this.val = val;
  9. }
  10. TreeNode(int val, TreeNode left, TreeNode right) {
  11. this.val = val;
  12. this.left = left;
  13. this.right = right;
  14. }
  15. }

我们可以看出来,左节点与右节点也是一颗树,那么我们这里使用递归比较当前节点的值即可

首先我们判断边界值:当p、q都为null时,我们认为该树也是相同的

  1. public boolean isSameTree(TreeNode p, TreeNode q) {
  2. if(p == null && q == null){
  3. return true;
  4. }
  5. if (p != null && q != null && p.val == q.val){
  6. return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
  7. }else {
  8. return false;
  9. }
  10. }