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. python input函数

    函数 input() 让程序暂停运行,等待用户输入值,之后再把值赋给变量,输出.

  2. grafana ldap 权限无法保持

    一.Grafana介绍 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.它主要有以下六大特点: 1.展示方式:快速灵活的客户端图表,面板插 ...

  3. AtCoder AGC003 简要题解

    A 首先横向和纵向互相独立,因此只考虑横向的情况. 那么显然只要不只往一边走都一定存在一种构造方式,直接判断即可,复杂度 \(\mathcal{O}(|S|)\). B 首先相邻两个数同时配对两次可以 ...

  4. 模拟dom结构

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. iframe父子页面相互调用方法,相互获取元素

    父页面获取子页面 var childWin = document.getElementById('setIframe').contentWindow;//获取子页面窗口对象 childWin.send ...

  6. 第11、12章等待方法和alter框处理

    11.等待方法 time sleep webdriver implicitly_wait() 设置浏览器等待时间 WebDriverWait 等待条件满足或超时后退出   12.alter对话框处理 ...

  7. node Cheerio 获取script脚本里的数据

    const cheerio = require('cheerio'); const $ = cheerio.load(html); // your html//如果有多少script脚本标签使用循环来 ...

  8. 如何从0到1设计一个类Dubbo的RPC框架

    之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...

  9. 《PHP程序员面试笔试宝典》——如何回答系统设计题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 应届生在面试时,偶尔也会遇到一些系统设计题,而这些题目往往只是测试求职者的知识面,或者测试求职者对系统架构方面的了解,一 ...

  10. Solution -「CERC 2016」「洛谷 P3684」机棚障碍

    \(\mathcal{Description}\)   Link.   给一个 \(n\times n\) 的网格图,每个点是空格或障碍.\(q\) 次询问,每次给定两个坐标 \((r_1,c_1), ...