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

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

1.题目描述

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
 
For example, this binary tree is symmetric:
 
1
/ \
2   2
/ \ / \
3  4 4  3
But the following is not:
 
1
/ \
2   2
\   \
3    3
Note:
Bonus points if you could solve it both recursively and iteratively.

2.解法分析

这个题目其实可以看做是深度搜索的变种,深度搜索有三种:先序、中序和后序,对于这个题目,我们对root的左右子树同时进行先序深度搜索,所不同的是,左子树的深度搜索是“左右”顺序,右子树是“右左”顺序,只要直到深度搜索完成都满足同步,那么这棵树满足要求。

/**
* Definition for binary tree
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(!root)return true;
 
vector
left_traversal;
vector
right_traversal;
 
 
TreeNode * cur_left = root->left;
TreeNode *cur_right = root->right;
 
if((cur_left!=NULL&&cur_right==NULL)||(cur_left==NULL&&cur_right!=NULL))return false;
if(cur_left==NULL&&cur_right==NULL)return true;
 
while(!left_traversal.empty()||cur_left)
{
while(cur_left)
{
if(!cur_right)return false;
if(cur_left->val!=cur_right->val)return false;
left_traversal.push_back(cur_left);
right_traversal.push_back(cur_right);
cur_left= cur_left->left;
cur_right = cur_right->right;
}
 
if(!left_traversal.empty())
{
if(cur_right)return false;
cur_left=left_traversal.back();left_traversal.pop_back();
cur_right=right_traversal.back();right_traversal.pop_back();
 
cur_left = cur_left->right;
cur_right = cur_right->left;
}
}l
if(!left_traversal.empty()||!right_traversal.empty())return false;
if(cur_left&&cur_right)return cur_left->val==cur_right->val;
else
{
if(!cur_left&&!cur_right)return true;
else return false;
}
return true;
}
 
};

转载于:https://www.cnblogs.com/obama/p/3260869.html

你可能感兴趣的文章
new 一个接口?
查看>>
闲话WPF之九(Dependency属性 [1] )
查看>>
[解惑]JavaScript事件机制
查看>>
DotNET企业架构应用实践-实例架构设计中的业务分层-提取独立的业务层
查看>>
QTP的那些事--连接oracle的方法
查看>>
戴文的Linux内核专题:03 驱动程序【转】
查看>>
解决虚拟机Reason: The file is too large问题
查看>>
EXTJS学习系列提高篇:第二十六篇(转载)作者殷良胜,ext2.2打造Ext.form.ComboBox系列--静态绑定...
查看>>
5个CSS3技术实现设计增强
查看>>
【原】iOS触摸事件深度解析
查看>>
hive中解决中文乱码
查看>>
【译】Core Java Questions and Answers【1-33】
查看>>
桶排序
查看>>
EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
查看>>
asp.net 程序自动提交登陆表单并保持Session及Cookie
查看>>
★Kali信息收集~4.DNS系列
查看>>
spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...
查看>>
C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
查看>>
[转]c#中从string数组转换到int数组
查看>>
iOS: FFmpeg的使用二
查看>>