题目与示例
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

我的代码
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { public boolean isSameTree(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 isSameTree(p.left,q.left)&&isSameTree(p.right,q.right); }}
构造完全二叉树
public class cre{ private static int[] array = {1, 2, 3, 4, 5}; // 存储生成的节点 private static List<TreeNode> nodeList = new LinkedList<>(); public static TreeNode createTree() { // 构造节点 for (int i = 0; i < array.length; i++) { TreeNode node = new TreeNode(array[i]); nodeList.add(node); } // 构造节点之间的关系 for (int i = 0; i < nodeList.size() / 2; i++) { TreeNode node = nodeList.get(i); node.left = nodeList.get(i * 2 + 1); // 最后一个父节点 可能没有右孩子 需要额外判断 if (i * 2 + 2 < nodeList.size()) { node.right = nodeList.get(i * 2 + 2); } } return nodeList.get(0); }}