【Leetcode】对称二叉树
递归法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == NULL)
return true; if( isMirror(root->left, root->right))
return true;
else
return false;
} bool isMirror(TreeNode* lc, TreeNode* rc) {
if(lc == NULL && rc == NULL)
return true; if(lc == NULL || rc == NULL)
return false;
else {
if (lc->val == rc->val)
return (isMirror(lc->left, rc->right) && isMirror(lc->right, rc->left));
else
return false;
}
}
};
时间复杂度:
O(n),因为算法过程要遍历树的每一个节点,节点数量为n。
空间复杂度:
O(n),递归函数使用的栈空间与树的层数有关。如果树为线性结构,其层数为n,所以空间复杂度为O(n)
迭代法
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == NULL)
return true;
queue< TreeNode* > q1;
queue< TreeNode* > q2;
q1.push(root->left);
q2.push(root->right);
while(q1.size()> && q2.size()>) {
TreeNode* n1 = q1.front();
TreeNode* n2 = q2.front();
q1.pop();
q2.pop();
if(n1 == NULL && n2 == NULL)
continue;
if(n1 == NULL || n2 == NULL)
return false;
if(n1->val == n2->val) {
q1.push(n1->left);
q2.push(n2->right);
q1.push(n1->right);
q2.push(n2->left);
}
else
return false;
}
return true;
}
};
时间复杂度:
O(n) 要遍历每一个节点;
空间复杂度:
搜索队列需要额外的空间。在最糟糕情况下,我们不得不向队列中插入 O(n)个结点(???)。因此,空间复杂度为 O(n)。
【Leetcode】对称二叉树的更多相关文章
- LeetCode【101. 对称二叉树】
对称二叉树,就是左节点的左节点等于右节点的右节点,左节点的右节点等于右节点的左节点. 很自然就想到迭代与递归,可以创建一个新的函数,就是另一个函数不断的判断,返回在主函数. class Solutio ...
- LeetCode 101 对称二叉树的几种思路(Python实现)
对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2 ...
- Java实现 LeetCode 101 对称二叉树
101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2 ...
- Leecode刷题之旅-C语言/python-101对称二叉树
/* * @lc app=leetcode.cn id=101 lang=c * * [101] 对称二叉树 * * https://leetcode-cn.com/problems/symmetri ...
- C语言递归之对称二叉树
题目描述 给定一个二叉树,检查它是否是镜像对称的. 示例 二叉树 [1,2,2,3,4,4,3] 是对称的. / \ / \ / \ [1,2,2,null,3,null,3] 则不是镜像对称的. / ...
- 【leetcode-101】 对称二叉树
101. 对称二叉树 (1过) 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [ ...
- 【洛谷P5018】对称二叉树
题目大意:定义对称二叉树为每个节点的左右子树交换后与原二叉树仍同构的二叉树,求给定的二叉树的最大对称二叉子树的大小. 代码如下 #include <bits/stdc++.h> using ...
- 判断对称二叉树 python代码
对称二叉树的含义非常容易理解,左右子树关于根节点对称,具体来讲,对于一颗对称二叉树的每一颗子树,以穿过根节点的直线为对称轴,左边子树的左节点=右边子树的右节点,左边子树的右节点=左边子树的左节点.所以 ...
- LeetCode 107 ——二叉树的层次遍历 II
1. 题目 2. 解答 与 LeetCode 102 --二叉树的层次遍历 类似,我们只需要将每一层的数据倒序输出即可. 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level ...
- LeetCode:二叉树的后序遍历【145】
LeetCode:二叉树的后序遍历[145] 题目描述 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很 ...
随机推荐
- dp常见优化方法
noip范围内的dp优化方法: 加速状态转移 1.前缀和优化 2.单调队列优化 3.线段树或树状数组优化 精简状态 3:精简状态往往是通过对题目本身性质的分析,去省掉一些冗余的状态.相对以上三条套路性 ...
- 洛谷 P5239 回忆京都 题解
题面 裸的杨辉三角前缀和,但----- 在求前缀和的时候有可能得到一个负数(由于取模的原因),所以一定要加上模数后再取模!!!! #include <bits/stdc++.h> #def ...
- [.net core]11.异常页
.net core中的异常页很重要 因为可以查看异常的堆栈信息, 请求的参数(如果有),cookie, http头 帮助我们快速的定位问题 .net core web app 默认开启了异常页,但是 ...
- ELK-全文检索技术-lucene
ELK : ELK是ElasticSearch,LogStash以及Kibana三个产品的首字母缩写 一.倒排索引 学习elk,必须先掌握倒排索引思想, 参考文档: https://www.cn ...
- ssl多人多附件多格式邮件发送
package com.dfmy.util; import java.io.File; import java.security.Security; import java.util.ArrayLis ...
- 需求文档(PRD文档)
https://blog.csdn.net/zhangbijun1230/article/details/79451874
- poj 1915 KnightMoves(bfs)
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 24094 Accepted: 11364 De ...
- scp 自动带密码参数复制文件到主机
一.安装sshpass工具 [root@zabbix_server scripts]# yum install sshpass 二.运行 [root@zabbix_server scripts]# s ...
- C#操作目录和文件
C#操作目录和文件 创建目录和文件 1.通过Path类的Combine方法可以合并路径. string activeDir = @"C:\myDir"; string newPa ...
- (转) ORACLE 正确删除归档日志的方法
ORACLE 正确删除归档日志的方法 我们都知道在controlfile中记录着每一个archivelog文件的相关信息,当然们在OS下把这些物理文件delete掉后,在我们的controlfile中 ...