same tree(判断两颗二叉树是否相等)
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(判断两颗二叉树是否相等)的更多相关文章
- 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
		给定一个二叉树,检查它是否是它自己的镜像(即,围绕它的中心对称).例如,这个二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \3 4 4 3但是 ... 
- LeetCode 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
		Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For ex ... 
- 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 ... 
- 【遍历二叉树】08判断两个二叉树是否相同【Same Tree】
		迭代版本用的是二叉树的DFS,中的root->right->left +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ... 
- 判断一颗二叉树是否为二叉平衡树 python 代码
		输入一颗二叉树,判断这棵树是否为二叉平衡树.首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.因此判断一颗二叉平衡树的关键在于 ... 
- Same Tree 比较两个二叉树是否完全相同
		Given two binary trees, write a function to check if they are equal or not. Two binary trees are con ... 
- 剑指offer58:对称的二叉树。判断一颗二叉树是不是对称的,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的
		1 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 2 思路和方法 定义一种遍历算法,先遍历右子结点再遍历左子结点:如对称先序 ... 
- Same Tree,判断两个二叉树是不是相同的树,结构相同,每个节点的值相同
		算法分析:这道题很简单,利用递归即可. public class SameTree { public boolean isSameTree(TreeNode p, TreeNode q) { if(p ... 
- java实现判断两个二叉树是否相同
		1.定义树节点类:节点值.左节点.右节点.构造器 2.先判断树是否为空的情况 3.树不为空时,判断节点所指的值是否相等,若相等,则递归判断节点的左右节点是否相同,相同则返回true /** * Def ... 
随机推荐
- UNIX网络编程——客户/服务器程序设计示范(六)
			TCP并发服务器程序,每个客户一个线程 前面讲述了,每个客户一个进程的服务器,或为每个客户现场fork一个子进程,或者预先派生一定数目的子进程.如果服务器主机支持线程,我们就可以改用线程以取代子进程. ... 
- EBS的性能调优
			 metalink Tuning performance on eBusiness suite (Doc ID 744143.1) 这篇文档描述了如何调查电子商务套件的整体性能下降. ... 
- 【Linux驱动】字符设备驱动
			一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面 ... 
- CMake设置FOLDER失败及解决
			CMake可以设置FOLDER属性,用来分目录组织VC中的多个工程. FOLDER: Set the folder name. Use to organize targets in an IDE. T ... 
- HBase作为存储方案
			HBase存储特点 * Client 1. 包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息. * Zookeeper: 1. 选举集群中的Master, ... 
- Android开发技巧——PagerAdapter实现类的封装
			ViewPager是android的support库中的一个控件,也是一个在许多应用开发中都用得比较多的控件.目前为止,对ViewPager的使用,我一般是用ViewPager + Fragment的 ... 
- SIM900A设备在保加利亚无法正常使用GPRS问题
			1. SIM900A设备在保加利亚GPRS功能无法正常使用 我们一款手持设备采用SIM900A模块,在发货之前测试正常,但到了保加利亚,客户发现无法正常上网,我们技术支持反馈的邮件反馈的现象 ... 
- 控件之combox
			一. combox显示 首先combox有两个属性来存储数据:DisplayMember(显示成员),ValueMember(值成员) ,DisplayMember是我们在combox界面上看 ... 
- JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较
			JAVA之旅(十六)--String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较 过节耽误了几天,我们继续JAVA之旅 一.String概述 String时 ... 
- Demand Side Platform
			DSP特点: DSP不是从网络媒体那里包买广告位,也不是采用CPD(Cost Per Day)的方式获得广告位:而是从广告交易平台(AdExchange)来通过实时竞价的方式获得对广告进行曝光的机会, ... 
