Input:     1         1
/ \ / \
2 3 2 3 [1,2,3], [1,2,3] Output: true

Example 2:

Input:     1         1
/ \
2 2 [1,2], [1,null,2] Output: false

Example 3:

Input:     1         1
/ \ / \
2 1 1 2 [1,2,1], [1,1,2] Output: false

判断两个二叉树是否相等。

一:使用递归

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 isSameTree(p.left,q.left)&&isSameTree(p.right,q.right);
return false;
}

二:根据遍历出来的顺序,但是由于遍历右左子树可能有一个为空,会影响结果。

class Solution {
StringBuilder sb1=new StringBuilder();
StringBuilder sb2=new StringBuilder();
public boolean isSameTree(TreeNode p, TreeNode q) {
/**遍历:出现左右子树只有一个为空时,用null代替存储。所以直接用StringBuilder来存储遍历的结果。 */
if(p==null&&q==null) return true;
if(p==null||q==null) return false; bianLi(p,sb1);
bianLi(q,sb2);
return sb1.toString().equals(sb2.toString()); } public void bianLi(TreeNode node,StringBuilder sb){
if(node!=null){
sb.append(node.val);
if(node.left!=null&&node.right!=null){
bianLi(node.left,sb);
bianLi(node.right,sb);
}
if(node.left!=null){
bianLi(node.left,sb);
sb.append("null");
}
if(node.right!=null){
sb.append("null");
bianLi(node.right,sb);
}
} }
}

但是,其实这里不需要输出遍历 的结果,只需要在遍历过程中对两者进行比较就行。

    public boolean isSameTree(TreeNode p, TreeNode q) {

        if(p==null&&q==null) return true;
if(p==null||q==null) return false; return bianLi2(p,q);
} public boolean bianLi2(TreeNode node1,TreeNode node2){
if(node1==null&&node2==null) return true;
if(node1!=null&&node2!=null){
if(node1.val!=node2.val) return false;
return bianLi2(node1.left,node2.left)&&bianLi2(node1.right,node2.right);
}
return false;
}

三:可以不使用递归,使用深度遍历方法,也不需要输出遍历结果,只需在遍历时判断即可

        if(p==null&&q==null) return true;
if(p==null||q==null) return false; //深度优先遍历 Stack<TreeNode> s1=new Stack<>();
Stack<TreeNode> s2=new Stack<>();
s1.push(p);
s2.push(q);
while(!s1.isEmpty()&&!s2.isEmpty()){
TreeNode node1=s1.pop();
TreeNode node2=s2.pop();
if(node1.val!=node2.val) return false;
if(node1.right!=null) s1.push(node1.right);
if(node2.right!=null) s2.push(node2.right);
if(s1.size()!=s2.size()) return false;
if(node1.left!=null) s1.push(node1.left);
if(node2.left!=null) s2.push(node2.left);
if(s1.size()!=s2.size()) return false;
}
return s1.size()==s2.size();

same tree(判断两颗二叉树是否相等)的更多相关文章

  1. 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树

    给定一个二叉树,检查它是否是它自己的镜像(即,围绕它的中心对称).例如,这个二叉树 [1,2,2,3,4,4,3] 是对称的.    1   / \  2   2 / \ / \3  4 4  3但是 ...

  2. LeetCode 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For ex ...

  3. LeetCode 100. Same Tree 判断两棵二叉树是否相等 C++

    Given two binary trees, write a function to check if they are the same or not. Two binary trees are ...

  4. 【遍历二叉树】08判断两个二叉树是否相同【Same Tree】

    迭代版本用的是二叉树的DFS,中的root->right->left +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  5. 判断一颗二叉树是否为二叉平衡树 python 代码

    输入一颗二叉树,判断这棵树是否为二叉平衡树.首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.因此判断一颗二叉平衡树的关键在于 ...

  6. Same Tree 比较两个二叉树是否完全相同

    Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ...

  7. 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的

    1 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 2 思路和方法 定义一种遍历算法,先遍历右子结点再遍历左子结点:如对称先序 ...

  8. Same Tree,判断两个二叉树是不是相同的树,结构相同,每个节点的值相同

    算法分析:这道题很简单,利用递归即可. public class SameTree { public boolean isSameTree(TreeNode p, TreeNode q) { if(p ...

  9. java实现判断两个二叉树是否相同

    1.定义树节点类:节点值.左节点.右节点.构造器 2.先判断树是否为空的情况 3.树不为空时,判断节点所指的值是否相等,若相等,则递归判断节点的左右节点是否相同,相同则返回true /** * Def ...

随机推荐

  1. 压力测试工具Ab简介

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 通过 yum-utils中的yumdownload  ...

  2. Servlet之Listener监听器

    Servlet2.5规范共有8中Listener接口,6种Event类型 ServletContextListener接口 [接口方法] contextInitialized()与 contextDe ...

  3. C++编译器对属性和方法的处理机制

    C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类.从计算机的角度,程序依然由数据段和代码段构成. C++编译器如何完成面向对象理论到计算机程序 ...

  4. Spring MVC 入门示例讲解 - howtodoinjava

    在本例中,我们将使用Spring MVC框架构建一个入门级web应用程序.Spring MVC 是Spring框架最重要的的模块之一.它以强大的Spring IoC容器为基础,并充分利用容器的特性来简 ...

  5. Uva - 1594 - Ducci Sequence

    水题,算出每次的结果,比较是否全0,循环1000次还不是全0则LOOP AC代码: #include <iostream> #include <cstdio> #include ...

  6. Java中的五种单例模式

    Java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例. 特点: 1,一个类只能有一个实例 2 自己创建这个实例 3 整个系统都要使用这个实例 例: 在下面 ...

  7. 基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件

    基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件 在INAND还没有写入镜像文件之前,通过ATK工具烧录xldr.nb0和eboot.nbo到INAND中,见相关链接 ...

  8. (NO.00002)iOS游戏精灵战争雏形(七)

    接上一篇博文,我们继续完成射击的功能. 还是在MainScene.m中,添加initBullets方法: -(void)initBullets{ CCSprite *bullet; for (int ...

  9. [问与答]怎样在 Android Stuido中删除一个project

    sof Remove Project from Android Studio 问 第一次用Android Stuido,建立一个项目,却不知道怎么删除? 答 大概有3种方式 方式一 (简单实用) 点击 ...

  10. Linux0.11启动过程

    从开机加电,到执行main函数之前的过程 好吧,这里应该是有执行3个汇编的文件,但是我不太了解.囧 从main函数,到启动OK(即可以响应用户操作了) 这个步骤做了3件事情: 创建进程0,使之具备在主 ...