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语言刷二叉树(二)基础部分的更多相关文章

  1. C语言刷二叉树(一)基础部分

    二叉树基础部分 144. 二叉树的前序遍历 方法一:递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; ...

  2. 无刷电调基础知识以及BLHeli固件烧录和参数调整

    标题: 无刷电调基础知识以及BLHeli固件烧录和参数调整 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#基础知识,#电调,#BLHeli,#固件,#烧录,#调参] 目录: [电 ...

  3. IOS系列swift语言之课时二

    今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...

  4. 《C#语言和数据库技术基础》单词必备

    <C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐,强烈的3.application      应用程序4.devel ...

  5. Go 语言入门(二)方法和接口

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(二 ...

  6. C语言实现二叉树-02版

    ---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那 ...

  7. C语言实现二叉树-利用二叉树统计单词数目

    昨天刚参加了腾讯2015年在线模拟考: 四道大题的第一题就是单词统计程序的设计思想: 为了记住这一天,我打算今天通过代码实现一下: 我将用到的核心数据结构是二叉树: (要是想了解简单二叉树的实现,可以 ...

  8. C语言第十二讲,文件操作.

    C语言第十二讲,文件操作. 一丶文件操作概述 在操作系统中,我们的文档都称为文件.操作系统也为我们提供了接口进行操作.不同语言都是使用的相同的接口,只不过封装的上层接口不一样 操作文件的步骤 打开文件 ...

  9. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

随机推荐

  1. JVM调优方法

    目 录 目 录 I 诠释JVM调优 1 第1章 JVM内存模型及垃圾收集算法 1 1.1 根据Java虚拟机规范,JVM将内存划分为 1 1.2 垃圾回收算法 1 第2章 内存泄漏及解决方法 2 2. ...

  2. SpringDataRedis入门到深入

    一:简介 SpringDataRedis是SpringData开源项目中的一部分,它可以在Spring项目中更灵活简便的访问和操作Redis:原先在没有SpringDataRedis时往往使用Jedi ...

  3. django之js模板插件artTemplate的使用

    安装: 方式1:artTemplate模板源码下载地址:https://aui.github.io/art-template/zh-cn/index.html 方式2:使用node.js进行安装:np ...

  4. Redis学习笔记(三)redis 的键管理

    Redis 的键管理 一.Redis 数据库管理 Redis 是一个键值对(key-value pair)的数据库服务器,其数据保存在 src/server.h/redisDb 中(网上很多帖子说在 ...

  5. ApacheCN 计算机视觉译文集 20210218 更新

    新增了六个教程: OpenCV3 安卓应用编程 零.前言 一.设置 OpenCV 二.使用相机帧 三.应用图像效果 四.识别和跟踪图像 五.将图像跟踪与 3D 渲染相结合 六.通过 JNI 混合 Ja ...

  6. 【XR-2】伤痕

    不难发现,直接漫无目的地构造不是一个好的选择,因为我们并不知道选择四座城市方案的上界是什么,因此下面可以来先分析一下这个方案的上界. 首先可以考虑这使得这四个点的导出子图是强连通的方案数,但是经过尝试 ...

  7. json解析出现:java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX

    感谢大佬:https://blog.csdn.net/one_ink/article/details/99817676 一.出错原因 当我们利用json解析中的toBean方法时,如果它的属性里面包含 ...

  8. C++ XML解析之TinyXML

    转载请注明来源:https://www.cnblogs.com/hookjc/ 使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析 ...

  9. SpringBeanUtils的部分方法类

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12060553.html SpringBeanUtils的部分方法类: import java. ...

  10. MySQL 索引、事务与存储引擎

               MySQL 索引.事务与存储引擎 1.索引 2.事务 3.存储引擎 1.索引: 索引的概念 : 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址 ...