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 ...
随机推荐
- JAVA排序--[冒泡排序]
package com.array; public class Sort_MaoPao { /** * 项目名称:冒泡排序 * 项目要求:用JAVA对数组进行排序,并运用冒泡排序算法 * 作者:Sev ...
- ubuntu下导入kali源
Kali-Linux之前的渗透神器BackTrack是基于Ubuntu的,界面比较友好,字体渲染看起来也比较舒服(也可能是本人用惯了 Ubuntu的缘故).后来官方终止BackTrack,开发Kali ...
- Smart Forms&ScriptFrom
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- FZU 2219 StarCraft(星际争霸)
Description 题目描述 ZB loves playing StarCraft and he likes Zerg most! One day, when ZB was playing SC2 ...
- C/C++内存泄漏及检测 转
C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...
- Spring依赖注入
依赖注入: 使用构造器注入 使用属性setter方法注入 使用Field注入(用于注解方式) 注入依赖对象可以采用手工装配或自动装配,在实际应用中建议使用手工装配,因为自动装配会产生未知情况,开发人员 ...
- nodejs学习笔记<四>处理请求参数
在web开发中处理请求参数是个非常常见的工作:nodejs提供了了querystring用来处理请求参数. querystring常用方法有:parse,stringify. (1)parse: 解析 ...
- Python SSH登陆--pexpect,pxssh
from pexpect import pxssh host = '192.168.80.139'user = 'allen'password = 'allen'command = 'df -h' d ...
- Android星星评分控件RatingBar的使用
在Android的开发中,有一个叫做评分控件RatingBar,我们可以使用该控件做等级划分.评分等作用,星星形状显示,也可以半星级别,我们来看一下评分控件如何使用. 布局文件中定义控件以及属性,这里 ...
- Handler详解系列(四)——利用Handler在主线程与子线程之间互发消息,handler详解
MainActivity如下: package cc.c; import android.app.Activity; import android.os.Bundle; import android. ...