Symmetric Tree [LeetCode]
Problem description: http://oj.leetcode.com/problems/symmetric-tree/
Basic idea: Both recursive and iterative solutions.
Iterative solution:
- /**
- * 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) {
- // Note: The Solution object is instantiated only once and is reused by each test case.
- if(root == NULL)
- return true;
- vector<TreeNode*> layer;
- layer.push_back(root);
- while(true) {
- //determine if the tree is symetric
- for(int i = ; i < layer.size()/; i ++ ) {
- //layer[i] compare layer[layer.size() - 1 - i]
- int right_idx = layer.size() - - i;
- if((layer[i]->left == NULL && layer[right_idx]->right == NULL ||
- (layer[i]->left != NULL && layer[right_idx]->right != NULL &&
- layer[i]->left->val == layer[right_idx]->right->val)) &&
- (layer[i]->right == NULL && layer[right_idx]->left == NULL ||
- (layer[i]->right != NULL && layer[right_idx]->left != NULL &&
- layer[i]->right->val == layer[right_idx]->left->val)))
- continue;
- else
- return false;
- }
- if(layer.size() % != ) {
- int middle = layer.size() / ;
- if(layer[middle]->left == NULL && layer[middle]->right == NULL ||
- (layer[middle]->left != NULL && layer[middle]->right != NULL &&
- layer[middle]->left->val == layer[middle]->right->val)){
- //do nothing
- }else{
- return false;
- }
- }
- //get node for next layer
- vector<TreeNode*> new_layer;
- for(auto node : layer) {
- if(node->left != NULL)
- new_layer.push_back(node->left);
- if(node->right != NULL)
- new_layer.push_back(node->right);
- }
- if(new_layer.size() == )
- break;
- layer = new_layer;
- }
- return true;
- }
- };
Recursive solution: easier to understand.
- class Solution {
- public:
- bool isSubSymmetric(TreeNode * left, TreeNode * right) {
- if(left == NULL && right == NULL)
- return true;
- else if(left != NULL && right == NULL || (right != NULL && left == NULL))
- return false;
- else if(left->val != right->val)
- return false;
- else
- return isSubSymmetric(left->left, right->right) && isSubSymmetric(left->right, right->left);
- }
- bool isSymmetric(TreeNode *root) {
- // Note: The Solution object is instantiated only once and is reused by each test case.
- if(root == NULL)
- return true;
- return isSubSymmetric(root->left, root->right);
- }
- };
Symmetric Tree [LeetCode]的更多相关文章
- Symmetric Tree——LeetCode
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- Symmetric Tree leetcode java
问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
- 【LeetCode】Symmetric Tree 推断一棵树是否是镜像的
题目:Symmetric Tree <span style="font-size:18px;"><span style="font-size:18px; ...
- [leetcode] 101. Symmetric Tree 对称树
题目大意 #!/usr/bin/env python # coding=utf-8 # Date: 2018-08-30 """ https://leetcode.com ...
- Leetcode之101. Symmetric Tree Easy
Leetcode 101. Symmetric Tree Easy Given a binary tree, check whether it is a mirror of itself (ie, s ...
- 【leetcode】Symmetric Tree
Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its ...
- LeetCode之“树”:Symmetric Tree && Same Tree
Symmetric Tree 题目链接 题目要求: Given a binary tree, check whether it is a mirror of itself (ie, symmetric ...
- LeetCode: Symmetric Tree 解题报告
Symmetric Tree Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its ...
随机推荐
- 【转载】理解C语言中的关键字extern
原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻 ...
- CUBRID学习笔记23 关键字列表
先放上特殊的字符 Backtick Symbol - ` 反引号 同撇 Double Quotes - " 双引号 Square Brackets - [ 中括号 如 ...
- C/C++内存泄漏及检测 转
C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...
- MSDN资料
http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series.aspx http://www.microsoft. ...
- JMeter入门合集
JMeter从入门到精通 http://blog.csdn.net/lihengxin/article/details/4325918 jmeter入门教程- Jmeter教程及技巧汇总 http:/ ...
- 在Windows上安装MySQL5.7
1. 下载安装包,这里选择压缩版mysql-5.7.16-winx64.zip: http://dev.mysql.com/downloads/mysql/ 2. 解压到安装目录,注意最好不要含有中文 ...
- 【Todo】Python面试题分析记录(修饰器等)
首先,看这一段代码: class A(object): x = 1 gen = (lambda t: (t for _ in xrange(10)))(x) if __name__ == '__mai ...
- Broadcast Receviewer
使用Braodcast Receiver 一.新建一个空的工程,命名为LearnBroadcastReceiver 二.为主界面添加一个按钮 三.新建一个broadcast receiver,命名为M ...
- TextView使用SpannableString设置复合文本
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...
- 从linux系统mysql导出数据库
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/50763674 1.MySQL数据库导出 /usr/local/mysql/bin/m ...