【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] 进阶: 递归算法很 ...
随机推荐
- mybatis多对多级联查询
1.实体 package com.govmade.govdata.modules.sys.pojo; import java.util.List; import javax.persistence.T ...
- CAS导致的ABA问题及解决:时间戳原子引用AtomicReference、AtomicStampedReference
1.CAS导致ABA问题: CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并交换,那么在这个时间差中会导致数据的变化. 比如:线程1从内存位置V中取出A,这时线程2也从V中取出A ...
- Android-Widget桌面小组件
1, 掌握Widget的用:Widget的用途,能够添加到手机桌面的程序 2, Widget的特点和用法步骤: 特点:快捷,方便,个性化,可自定义功能,可及时控制更新Widget显示内容 3, 用法步 ...
- zk ui安装 (选装,页面查看zk的数据)
# 使用WEB UI查看监控集群-zk ui安装 cd /usr/local git clone https://github.com/DeemOpen/zkui.git yum install -y ...
- wpf prism加载独立模块实例
一.首先看看文件的组织架构 module1 module2生成dll某块.Shell来显示管理模块 二,看看关键bootstrapper类 using System;using System.Coll ...
- git 计算commit
转自:https://www.cnblogs.com/jwentest/p/8186712.html#!/bin/bash f1="$1*" f2="$2*" ...
- 在浏览器输入url,发生了什么?BSC结构图(百度搜索关键字发生了什么?)
服务器---------->软件(客户端) 百度搜索周杰伦,发生了什么
- 日语能力考试N2级核心词汇必备—形容词
日语能力考试N2级核心词汇必备—形容词 ありがたい·有難い 难得的,值得感谢的,真高兴的あかい·赤い 红色的,左翼的,共产主义的あさい·浅い 浅的,事物的程度等小的,色淡的,浅薄的,肤浅的あつい· 1 ...
- SpringBoot集合Linux的FastDFS与Nginx上传图片测试错误com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can't create connection to/192.168.1.104:22122
报错 com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can't create connection to/ ...
- icmp, IPPROTO_ICMP - Linux IPv4 ICMP 核心模块.
DESCRIPTION 描述 本网络核心协议模块实现了基于 RFC792 协议中定义的<互联网控制报文协议>.它针对网络主机间通讯出错的情况作出回应并给出诊断信息.用户不能直接使用本模块. ...