C语言刷二叉树(二)基础部分
102. 二叉树的层序遍历
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/ /**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{
struct TreeNode *queue[2001];
int front = 0, rear = 0; if (root != NULL) {
queue[rear++] = root;
} int **res = (int **)malloc(sizeof(int *) * 2001);
*returnColumnSizes = (int *)malloc(sizeof(int) * 2001);
*returnSize = 0; while (front < rear) {
int colIndex = 0;
// 申请内存
int last = rear;
res[(*returnSize)] = (int *)malloc(sizeof(int) * (last - front));
while (front < last) {
// 取出当前节点
struct TreeNode *curNode = queue[front++];
res[(*returnSize)][colIndex++] = curNode->val; if (curNode->left != NULL) {
queue[rear++] = curNode->left;
}
if (curNode->right != NULL) {
queue[rear++] = curNode->right;
}
}
(*returnColumnSizes)[(*returnSize)] = colIndex;
(*returnSize)++;
}
return res;
}
226. 翻转二叉树
这道题注意:写指针的Swap的时候,要取指针的地址,即二级指针
方法1:递归(前序遍历)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/ void Swap(struct TreeNode **left, struct TreeNode **right)
{
// printf("begin left:%p, right:%p\n", left, right);
struct TreeNode *tmp = *left;
*left = *right;
*right = tmp;
// printf("end left:%p, right:%p\n", left, right);
} struct TreeNode* invertTree(struct TreeNode* root)
{
if (root == NULL) {
return root;
}
// 前序:中 左 右
// printf("Swap前 end left:%p, right:%p\n", root->left, root->right);
Swap(&root->left, &root->right);
// printf("Swap后 end left:%p, right:%p\n", root->left, root->right);
// struct TreeNode* temp = root->left;
// root->left = root->right;
// root->right = temp; invertTree(root->left);
invertTree(root->right);
return root;
}
方法2:迭代(前序遍历)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/ void Swap(struct TreeNode **left, struct TreeNode **right)
{
struct TreeNode *tmp = *left;
*left = *right;
*right = tmp;
} struct TreeNode* invertTree(struct TreeNode* root)
{
struct TreeNode *stack[10];
int index = 0; if (root != NULL) {
stack[index++] = root;
}
while (index != 0) {
// 取出当前节点(准备交换左右子节点)
struct TreeNode *curNode = stack[--index];
if (curNode == NULL) {
break;
}
Swap(&curNode->left, &curNode->right);
// 上面已经交换完了,这里安装前序遍历正常顺序(如果不是翻转的需要则逆序,由于是栈)
if (curNode->left != NULL) {
stack[index++] = curNode->left;
}
if (curNode->right != NULL) {
stack[index++] = curNode->right;
}
}
return root;
}
C语言刷二叉树(二)基础部分的更多相关文章
- C语言刷二叉树(一)基础部分
二叉树基础部分 144. 二叉树的前序遍历 方法一:递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; ...
- 无刷电调基础知识以及BLHeli固件烧录和参数调整
标题: 无刷电调基础知识以及BLHeli固件烧录和参数调整 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#基础知识,#电调,#BLHeli,#固件,#烧录,#调参] 目录: [电 ...
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- 《C#语言和数据库技术基础》单词必备
<C#语言和数据库技术基础> 第一章1..NET Framework 框架2.sharp 尖锐,强烈的3.application 应用程序4.devel ...
- Go 语言入门(二)方法和接口
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...
- C语言实现二叉树-02版
---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那 ...
- C语言实现二叉树-利用二叉树统计单词数目
昨天刚参加了腾讯2015年在线模拟考: 四道大题的第一题就是单词统计程序的设计思想: 为了记住这一天,我打算今天通过代码实现一下: 我将用到的核心数据结构是二叉树: (要是想了解简单二叉树的实现,可以 ...
- C语言第十二讲,文件操作.
C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
随机推荐
- windows下使用LTP分词,安装pyltp
1.LTP介绍 ltp是哈工大出品的自然语言处理工具箱, 提供包括中文分词.词性标注.命名实体识别.依存句法分析.语义角色标注等丰富. 高效.精准的自然语言处理技术.pyltp是python下对ltp ...
- python 小兵之小技巧
用for循环打印数字从1开始 for a in range(1,num+1): 用split切割字符串可以用索引选择部分 int(el.split("_")[1]) range 第 ...
- django之集成七牛云对象存储
Python3 + Django2.0 集成 "七牛云" 对象存储 (SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error- ...
- java中的数据模型类
package com.aaa.zxf.ajax.test; import java.io.Serializable; /** * java中的继承. * * 一.数据模型类 * 数据模型类:用来存取 ...
- CF1574F Occurrences
考虑什么样的串是合法的. 直接考虑比较抽象,考虑具象化这个问题. 容易发现一个字符串的限制就相当于如果出现了其中一个字符 \(a_i = c\),那么 \(s\) 中 \(c\) 前 \(i - 1\ ...
- IDE添加自定义注释
前言:最近在找IDE自定义模板注释时,十分不愉快,找了很久,才找到适合自己的,故记录一下 一.IDE自定义类注释: 1:打开自定义模板界面,并添加自定义内容: 2:新建类,效果如下 备注: ...
- 物理CPU,物理核,逻辑CPU,虚拟CPU(vCPU)区别 (转)
在做虚拟化时候,遇到划分CPU的问题,因此考虑到CPU不知道具体怎么划分,查询一些资料后就写成本文. a. 物理CPU:物理CPU是相对于虚拟CPU而言的概念,指实际存在的处理器,就是我们可以看的见, ...
- python folium 库学习
一.简介 folium是js上著名的地理信息可视化库leaflet.js为Python提供的接口,通过它,我们可以通过在Python端编写代码操纵数据,来调用leaflet的相关功能,基于内建的osm ...
- UTF-8编码规则(摘自JDK官方文档)
- C预备知识_001
程序由什么构成? 1.对数据的描述:在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,其实这就是数据结构(data structure). 2.对操作的描述:即要求计算机就行操作的步骤,也 ...