相同的树
一、题目
100. 相同的树
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false
提示:
- 两棵树上的节点数目都在范围
[0, 100] 内
-104 <= Node.val <= 104
二、题解
思路:
相同的二叉树,也就是说,两节点,以及两节点的值,都要相同
- 如果两节点节点相同,即 同为null 捉着同不为 null
- 同时,值也要相同 ,此时才能说此节点相同
题解一(广度优先)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public static boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(p); queue.offer(q); while (!queue.isEmpty()) { TreeNode pPoll = queue.poll(); TreeNode qPoll = queue.poll(); if (pPoll == null && qPoll == null) { continue; } if (pPoll == null || qPoll == null) { return false; }
if (pPoll.val != qPoll.val) { return false; } queue.offer(pPoll.left); queue.offer(qPoll.left); queue.offer(pPoll.right); queue.offer(qPoll.right); } return true; }
|

题解二(深度优先)
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static boolean isSameTreeFromDFS(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null || q == null) { return false; } if (p.val != q.val) { return false; } return isSameTreeFromDFS(p.left, q.left) && isSameTreeFromDFS(p.right, q.right); }
|

三、总结
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package com.loltoulan.binary_tree;
import java.util.LinkedList; import java.util.Queue;
public class IsSameTree {
public static void main(String[] args) { System.out.println((isSameTree(null, null)));
System.out.println(isSameTree(new TreeNode(1), null)); System.out.println(isSameTree(null, new TreeNode(1)));
TreeNode tree1 = new TreeNode(1); tree1.left = new TreeNode(2); tree1.right = new TreeNode(3);
TreeNode tree2 = new TreeNode(1); tree2.left = new TreeNode(2); tree2.right = new TreeNode(3);
System.out.println(isSameTree(tree1, tree2));
TreeNode tree3 = new TreeNode(1); tree3.left = new TreeNode(2); tree3.right = new TreeNode(4);
System.out.println(isSameTree(tree1, tree3));
TreeNode tree4 = new TreeNode(1); tree4.left = new TreeNode(2);
System.out.println(isSameTree(tree1, tree4)); }
public static boolean isSameTreeFromDFS(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } if (p == null || q == null) { return false; } if (p.val != q.val) { return false; } return isSameTreeFromDFS(p.left, q.left) && isSameTreeFromDFS(p.right, q.right); }
public static boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } Queue<TreeNode> queue = new LinkedList<>(); queue.offer(p); queue.offer(q); while (!queue.isEmpty()) { TreeNode pPoll = queue.poll(); TreeNode qPoll = queue.poll(); if (pPoll == null && qPoll == null) { continue; } if (pPoll == null || qPoll == null) { return false; }
if (pPoll.val != qPoll.val) { return false; } queue.offer(pPoll.left); queue.offer(qPoll.left); queue.offer(pPoll.right); queue.offer(qPoll.right); } return true; } }
|