热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

力扣LeetCode经典算法从上到下打印二叉树

数据结构(四十三)学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。——从上
数据结构(四十三)

学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。

—— 从上到下打印二叉树 ——


1.题目描述

第一题:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
第二题:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
第三题:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

示例:

第一题:
输入:
[3,9,20,null,null,15,7]

3/ \9 20/ \15 7

输出:

[3,9,20,15,7]

第二题:
输入:
[3,9,20,null,null,15,7]

3/ \9 20/ \15 7

输出:

[[3],[9,20],[15,7]
]

第三题:

输入:
[3,9,20,null,null,15,7]

3/ \9 20/ \15 7

输出:

[[3],[20,9],[15,7]
]

2.代码

第一题:
c

/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/#define MAX_SIZE 1200
int* levelOrder(struct TreeNode* root, int* returnSize){if(root &#61;&#61; NULL){*returnSize &#61; 0;return root;}struct TreeNode *Queue[MAX_SIZE];int fornt &#61;-1,rear&#61;-1;int len&#61;0;struct TreeNode *p;int *arr&#61;(int *)malloc(sizeof(int)*MAX_SIZE);Queue[&#43;&#43;rear]&#61;root;while(fornt<rear){p&#61;Queue[&#43;&#43;fornt];arr[len&#43;&#43;]&#61;p->val;if(p->left)Queue[&#43;&#43;rear]&#61;p->left;if(p->right)Queue[&#43;&#43;rear]&#61;p->right;}*returnSize&#61;len;return arr;
}

第二题&#xff1a;
c

/*** 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().*/#define MAX_SIZE 1200
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{if(root &#61;&#61; NULL){*returnSize &#61; 0;return NULL;}struct TreeNode *Node[MAX_SIZE];int **nums &#61; (int **)malloc(sizeof(int *)*MAX_SIZE);*returnColumnSizes &#61; (int *)malloc(sizeof(int*)*MAX_SIZE);int fornt &#61; 0,rear &#61; 0,line &#61; 0,column &#61; 0,count &#61; 0,k &#61; 1;Node[rear&#43;&#43;] &#61; root;nums[line] &#61; (int *)malloc(sizeof(int)*k); (*returnColumnSizes)[line] &#61; k;while(fornt < rear){struct TreeNode* temp &#61; Node[fornt&#43;&#43;]; nums[line][column&#43;&#43;] &#61; temp->val;if(temp->left){Node[rear&#43;&#43;] &#61; temp->left;count&#43;&#43;;}if(temp->right){Node[rear&#43;&#43;] &#61; temp->right;count&#43;&#43;;}k--;if(k &#61;&#61; 0){k &#61; count;count &#61; 0;column &#61; 0;line&#43;&#43;;nums[line] &#61; (int*)malloc(sizeof(int)*k);(*returnColumnSizes)[line] &#61; k;} }*returnSize &#61; line;return nums;
}

第三题&#xff1a;
c

/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/#define MAX_SIZE 1200
void FlipData(int **ans, int line, int column)
{int left &#61; 0;int right &#61; column - 1;while (left < right) {int tmp &#61; ans[line][right];ans[line][right] &#61; ans[line][left];ans[line][left] &#61; tmp;left&#43;&#43;;right--;}return;
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){if(root &#61;&#61; NULL){ *returnSize &#61; 0;return NULL;}struct TreeNode *Node[MAX_SIZE];int **nums &#61; (int **)malloc(sizeof(int *)*MAX_SIZE);*returnColumnSizes &#61; (int *)malloc(sizeof(int*)*MAX_SIZE);//fornt&#xff1a;队列头坐标 rear&#xff1a;队列尾坐标 line&#xff1a;数组行下标 column&#xff1a;数组列下标 count:每层节点数量int fornt &#61; 0,rear &#61; 0,line &#61; 0,column &#61; 0,count &#61; 0,k &#61; 1;Node[rear&#43;&#43;] &#61; root;nums[line] &#61; (int *)malloc(sizeof(int)*k); (*returnColumnSizes)[line] &#61; k;while(fornt < rear){struct TreeNode* temp &#61; Node[fornt&#43;&#43;]; nums[line][column&#43;&#43;] &#61; temp->val;if(temp->left){Node[rear&#43;&#43;] &#61; temp->left;count&#43;&#43;;}if(temp->right){Node[rear&#43;&#43;] &#61; temp->right;count&#43;&#43;;}k--;if(k &#61;&#61; 0){if((line-1) % 2 &#61;&#61;0)FlipData(nums,line,column);k &#61; count;count &#61; 0; column &#61; 0;line&#43;&#43;;nums[line] &#61; (int*)malloc(sizeof(int)*k);(*returnColumnSizes)[line] &#61; k;} }*returnSize &#61; line;return nums;
}

这三道题都是二叉树的层次搜索&#xff0c;知识输出的形式不同&#xff0c;程序的主要部分是差不多的。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了如何在编程中正确处理包含空数组的 JSON 对象,提供了详细的代码示例和解决方案。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
author-avatar
sucbenson-lee_905
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有