100. 相同的树
难度简单519
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true
示例 2:
输入: 1 1 / \ 2 2 [1,2], [1,null,2] 输出: false
示例 3:
输入: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2] 输出: false
通过次数157,581提交次数261,800
思路解析:
1.两边前序遍历,存入数组后,比较即可。
2.欣赏极简的代码吧。
AC代码1:
/**
* 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 List<Integer>arrP=new ArrayList();
public List<Integer>arrQ=new ArrayList();
public void preOrderP(TreeNode root)
{
if(root==null)
{
arrP.add(null);
return;
}
arrP.add(root.val);
preOrderP(root.left);
preOrderP(root.right);
return;
}
public void preOrderQ(TreeNode root)
{
if(root==null)
{
arrQ.add(null);
return;
}
arrQ.add(root.val);
preOrderQ(root.left);
preOrderQ(root.right);
return;
}
public boolean isSameTree(TreeNode p, TreeNode q) {
preOrderP(p);
preOrderQ(q);
if(arrP.size()!=arrQ.size())
return false;
for(int i=0;i<arrP.size();i++)
{
if(arrP.get(i)!=arrQ.get(i))
{
if(arrP.get(i)!=null&&arrQ.get(i)!=null)//防止出现两个数明明相同,却num1==num2-->false的情况发生。
{
if(arrP.get(i)-arrQ.get(i)==0)
continue;
}
return false;
}
}
return true;
}
}
AC代码2:
/**
* 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) //解决p,q 其中一个是空的情况,或者全部为空的情况
return p==q;
if(p.val != q.val)
return false;
//前序遍历
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
}