博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:Same Tree
阅读量:4326 次
发布时间:2019-06-06

本文共 2644 字,大约阅读时间需要 8 分钟。

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

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

算法1:递归解法,如果根节点相同,再递归的看左子树和右子树是否相同                                              

1 /**  2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     bool isSameTree(TreeNode *p, TreeNode *q) {13         // IMPORTANT: Please reset any member data you declared, as14         // the same Solution instance will be reused for each test case.15         if(p && q)16         {17             if(p->val == q->val && isSameTree(p->left, q->left) && 18                 isSameTree(p->right, q->right))19                 return true;20             else return false;21         }22         else if(p || q)23             return false;24         else return true;25     }26 };

算法2:通过层序遍历,分别用两个队列保存两棵树的层序节点。每次从两个队列中分别取出一个元素,如果他们的值相同,再继续遍历子节点。注意每次取出的两个元素的左子树要么同时非空,要么同时为空,右子树也一样

1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     bool isSameTree(TreeNode *p, TreeNode *q) {13         // IMPORTANT: Please reset any member data you declared, as14         // the same Solution instance will be reused for each test case.15         queue
pQueue, qQueue;16 if(p)pQueue.push(p);17 if(q)qQueue.push(q);18 while(pQueue.empty() == false && qQueue.empty() == false)19 {20 TreeNode *pp = pQueue.front();21 TreeNode *qq = qQueue.front();22 pQueue.pop(); qQueue.pop();23 if(pp->val == qq->val)24 {25 if(pp->left && qq->left)26 {27 pQueue.push(pp->left);28 qQueue.push(qq->left);29 }30 else if(pp->left || qq->left)31 return false;32 if(pp->right && qq->right)33 {34 pQueue.push(pp->right);35 qQueue.push(qq->right);36 }37 else if(pp->right || qq->right)38 return false;39 }40 else return false;41 }42 if(pQueue.empty() && qQueue.empty())43 return true;44 else return false;45 }46 };

【版权声明】转载请注明出处:

转载于:https://www.cnblogs.com/TenosDoIt/p/3440753.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_36、SpringBoot整合mybatis之事务处理实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_38、源码编译安装Redis4.x...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_33、SpringBoot2.x整合Mybatis3.x注解实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_44、新日志框架LogBack介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>