【转载请注明】http://www.cnblogs.com/igoslly/p/8707664.html

来看一下题目:

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

Two binary trees are considered the same if they are structurally identical and the nodes have the same value.

Example 1:

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

题目意思:

判断两个二叉树是否相等

注意点:

1、区分左结点和右结点

2、虽然题目给的数组形式,但代码中还是以ListNode* 结点给出

思路:

1、分别遍历树1和树2,结束前若有结点不同,直接返回false


实现方法1:

使用前序遍历方法进行遍历,dfs()子函数递归操作

void dfs(bool * flag,TreeNode *node1,TreeNode * node2){
if(!(*flag)){return;} // 判断结果false,无需后续操作,直接返回
if(node1==NULL&&node2!=NULL){*flag=false;return;}
if(node1!=NULL&&node2==NULL){*flag=false;return;} // 若一方为NULL,一方还有值,直接判定false
if(node1==NULL&&node2==NULL){return;} // 两方均到根结点、遍历结束
if(node1->val!=node2->val){*flag=false;return;} // 当前根结点
// 遍历左结点和右结点
dfs(flag,node1->left,node2->left);
dfs(flag,node1->right,node2->right);
}
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
bool flag=true;
dfs(&flag,p,q);
return flag; }
};

实现方法2:

简化写法,直接递归原函数isSameTree,首先:① 取消子函数dfs  ②  无需分别判断 node1 & node2 的NULL情况

class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if (p&&q) // p & q 均有值
return(p->val==q->val && isSameTree(p->left,q->left) && isSameTree(p->right,q->right));
// return 先判断当前值是否相等
// 遍历左子树和右子树 else if (p||q) // p & q 不都有值
return false;
else // p & q 都无值
return true;
}
};

扩展:

在某个大神的代码里看到如下几行,是来做为了优化C++流中不断刷新缓冲区,进行:

static int x = [](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return ;
}();

具体解释可以看链接:https://www.cnblogs.com/PrayG/p/5749832.html

Leetcode0100--Same Tree 相同树的更多相关文章

  1. Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)

    在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...

  2. 页面设计--Tree目录树

    Tree目录树控件属性: 根据数据集合来配置相应的信息 加载模式有自动加载.自定加载 web中显示效果图:

  3. [转] Splay Tree(伸展树)

    好久没写过了,比赛的时候就调了一个小时,差点悲剧,重新复习一下,觉得这个写的很不错.转自:here Splay Tree(伸展树) 二叉查找树(Binary Search Tree)能够支持多种动态集 ...

  4. CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)

    CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ...

  5. 【数据结构】B-Tree, B+Tree, B*树介绍 转

    [数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tre ...

  6. poj 1741 Tree(树的点分治)

    poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对. 首先对于一个树中的点对,要么经过根结点,要么不经过.所以我们可以把经过根节点的符合点对统计出 ...

  7. 【POJ 2486】 Apple Tree(树型dp)

    [POJ 2486] Apple Tree(树型dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8981   Acce ...

  8. MYSQL的B+Tree索引树高度如何计算

    前一段被问到一个平时没有关注到有关于MYSQL索引相关的问题点,被问到一个表有3000万记录,假如有一列占8位字节的字段,根据这一列建索引的话索引树的高度是多少? 这一问当时就被问蒙了,平时这也只关注 ...

  9. easyUI之Tree(树)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  10. B-Tree, B+Tree, B*树介绍

    [数据结构]B-Tree, B+Tree, B*树介绍 转   [数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是 ...

随机推荐

  1. PHP服务搭建

    一.PHP二进制安装(下载路径http://cn2.php.net/get/php-5.5.32.tar.gz/from/a/mirror) 1.解压: tar xf php-5.5.32.tar.g ...

  2. HDU 1836 畅通工程

    畅通工程 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 18636 ...

  3. hdu 4859 最大点权独立集的变形(方格取数的变形)

    /*刚开始不会写,最大点权独立集神马都不知道,在潘神的指导下终于做出来,灰常感谢ps: 和方格取数差不多奇偶建图,对于D必割点权为0,对于.必然不割点权为inf.然后和方格取数差不多的建图 .--.| ...

  4. RDS for MySQL Online DDL 使用

    https://help.aliyun.com/knowledge_detail/41733.html?spm=5176.7841698.2.17.u67H3h

  5. python 执行环境

    一些函数 执行其它非python程序 1 一些函数 callable callable()是一个布尔函数,确定一个对象是否可以通过函数操作符(())来调用.如果函数可调用便返回True,否则便是Fal ...

  6. angular5 httpclient的示例实战

    摘要: 从angular 4.3.0 以后的版本开始使用httpclient,替换了之前的http,引用的包路径已经变为了angular/common/http了 一个基础的 httpclient 样 ...

  7. 通过urllib2抓取网页内容(1)

    一.urllib2发送请求 import urllib2 url = 'http://www.baidu.com' req = urllib2.Request(url) response = urll ...

  8. 使用python获取CPU和内存信息的思路与实现(linux系统)

    linux里一切皆为文件,在linux/unix的根文件夹下,有个/proc文件夹,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc&qu ...

  9. 【转】storm 开发系列一 第一个程序

    原文: http://blog.csdn.net/csfreebird/article/details/49104777 --------------------------------------- ...

  10. java如何实现替换指定位置的指定字符串的功能

    /**  * @创建日期 2013-07-15  * @创建时间 14:25:59  * @版本号 V 1.0  */ public class CosTest {     public static ...