题目与示例

  1. 100. 相同的树
  2. 给你两棵二叉树的根节点 p q ,编写一个函数来检验这两棵树是否相同。
  3. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
  1. 示例 1
  2. 输入:p = [1,2,3], q = [1,2,3]
  3. 输出:true

33.相同的树(2021.10.28) - 图1

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

33.相同的树(2021.10.28) - 图2

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

33.相同的树(2021.10.28) - 图3

我的代码

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. public boolean isSameTree(TreeNode p, TreeNode q) {
  18. if(p==null && q==null) return true;
  19. if(p==null || q==null) return false;
  20. if(p.val != q.val) return false;
  21. return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
  22. }
  23. }

构造完全二叉树

  1. public class cre{
  2. private static int[] array = {1, 2, 3, 4, 5};
  3. // 存储生成的节点
  4. private static List<TreeNode> nodeList = new LinkedList<>();
  5. public static TreeNode createTree() {
  6. // 构造节点
  7. for (int i = 0; i < array.length; i++) {
  8. TreeNode node = new TreeNode(array[i]);
  9. nodeList.add(node);
  10. }
  11. // 构造节点之间的关系
  12. for (int i = 0; i < nodeList.size() / 2; i++) {
  13. TreeNode node = nodeList.get(i);
  14. node.left = nodeList.get(i * 2 + 1);
  15. // 最后一个父节点 可能没有右孩子 需要额外判断
  16. if (i * 2 + 2 < nodeList.size()) {
  17. node.right = nodeList.get(i * 2 + 2);
  18. }
  19. }
  20. return nodeList.get(0);
  21. }
  22. }