热门标签 | 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的关键特性和最佳实践。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
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社区 版权所有