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