ACM模式数组构建二叉树Go语言实现

目的

想输入一个数组,然后构造二叉树
例如数组为[6, 2, 8, 0, 4, 7, 9, -1, -1, 3, 5]
对应的二叉树为:在这里插入图片描述

参考资料

ACM模式数组构建二叉树
重点:如果父节点的数组下标是i,那么它的左孩子下标就是i*2+1,右孩子下标就是i*2+2

go代码实现

package mainimport "fmt"type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}// 根据数组构造二叉树
func constructBinaryTree(nums []int) *TreeNode {treenode := make([]*TreeNode, len(nums))for i := 0; i < len(nums); i++ {var node *TreeNode //如果等于-1的话就是nilif nums[i] != -1 {node = &TreeNode{Val: nums[i]}treenode[i] = node}}for i := 0; i*2+2 < len(nums); i++ {if treenode[i] != nil {treenode[i].Left = treenode[i*2+1]treenode[i].Right = treenode[i*2+2]}}return treenode[0] //root=treenode[0]
}// 前序遍历-用于验证
func preorderTraversal(root *TreeNode) (res []int) {var traversal func(node *TreeNode)traversal = func(node *TreeNode) {if node == nil {return}res = append(res, node.Val)traversal(node.Left)traversal(node.Right)}traversal(root)return res
}// 中序遍历-用于验证
func inorderTraversal(root *TreeNode) (res []int) {var traversal func(node *TreeNode)traversal = func(node *TreeNode) {if node == nil {return}traversal(node.Left)res = append(res, node.Val)traversal(node.Right)}traversal(root)return res
}// 后序遍历-用于验证
func postorderTraversal(root *TreeNode) (res []int) {var traversal func(node *TreeNode)traversal = func(node *TreeNode) {if node == nil {return}traversal(node.Left)traversal(node.Right)res = append(res, node.Val)}traversal(root)return res
}func main() {nums := []int{6, 2, 8, 0, 4, 7, 9, -1, -1, 3, 5}root := constructBinaryTree(nums)fmt.Println("前序遍历:", preorderTraversal(root))fmt.Println("中序遍历:", inorderTraversal(root))fmt.Println("后序遍历:", postorderTraversal(root))
}

输出:

前序遍历: [6 2 0 4 3 5 8 7 9]
中序遍历: [0 2 3 4 5 6 7 8 9] 
后序遍历: [0 3 5 4 2 7 9 8 6] 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/113842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持续加码,科士达重仓储能!

储能的热度&#xff0c;如温度计一样真实展现在各种数据榜单上&#xff1a;新注册企业的数量&#xff0c;转型跨界的企业&#xff0c;尤其IPO募资扩产规模&#xff0c;更是成为了储能企业竞赛的新标准。 日前&#xff0c;科士达一则新的定向募资预案&#xff0c;吸引了业内广泛…

C++-list实现相关细节和问题

前言&#xff1a;C中的最后一个容器就是list&#xff0c;list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指…

模块化与组件化:开发中的双剑合璧

引言&#xff1a;模块化与组件化的重要性 在现代软件开发中&#xff0c;随着项目规模的增长和技术的复杂性增加&#xff0c;如何有效地组织和管理代码变得越来越重要。模块化与组件化作为两种主要的代码组织方法&#xff0c;为开发者提供了有效的工具&#xff0c;帮助他们创建…

three.js(十):线性几何体

线性几何体 WireframeGeometry 网格几何体EdgesGeometry 边缘几何体 WireframeGeometry 网格几何体 WireframeGeometry( geometry : BufferGeometry ) geometry — 任意几何体对象。 const geometry new SphereGeometry(); const wireframe new WireframeGeometry(geometr…

Unity RenderStreaming 云渲染-黑屏

&#x1f96a;云渲染-黑屏 网页加载出来了&#xff0c;点击播放黑屏 &#xff0c;关闭防火墙即可&#xff01;&#xff01;&#xff01;&#xff01;

正则表达式学习笔记

正则表达式学习笔记 常用正则表达式 1、匹配字母 Pattern patternPattern.compile("[a-zA-Z]"); 2、匹配数字 Pattern patternPattern.compile("[0-9]"); 3、匹配字母和数字 Pattern patternPattern.compile("([0-9])|([a-zA-Z])")…

C语言(第三十天)

1. 什么是bug bug本意是昆虫”或“虫子”&#xff0c;现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问 题&#xff0c;简称程序漏洞。 “Bug” 的创始人格蕾丝赫柏&#xff08;Grace Murray Hopper&#xff09;&#xff0c;她是一位为美国海军工作的…

Web网站服务器

目录 一、什么是Apache? 二、虚拟目录是什么&#xff1f; 三、Apcahe相关配置文件 四、httpd.conf主配置文件的常用配置参数 五、Web网站配置案例 5.1搭建基于用户的个人主页网站 5.2、配置虚拟目录 5.3、配置虚拟主机 5.3.1搭建两个基于IP地址的虚拟主机 5.3.2搭建两个基于域…

执行公开网数据采集-技术人员撤退

首先逼逼&#xff0c;此贴仅为秀肌肉&#xff0c;技术人员想学习的话可以绕道了 打开控制台&#xff0c;看cookie&#xff0c;ST&#xff0c;某数 第一个请求412&#xff0c;看VM 然后就是替换js&#xff0c;hook&#xff0c;之类的&#xff0c;扣代码流程&#xff0c;此处省…

无涯教程-Android - Intents/Filters

Android Intent 是要执行的操作的抽象描述。它可以与 startActivity 一起启动Activity&#xff0c;将 broadcastIntent 发送给任何BroadcastReceiver组件&#xff0c;并与 startService(Intent)或 bindService(Intent&#xff0c;ServiceConnection&#xff0c;int)与后台服务进…

游戏报错xinput1_3.dll丢失的解决方法,xinput1_3.dll修复步骤

今天&#xff0c;我将和大家探讨一个与我们日常生活息息相关的话题——电脑丢失xinput1_3.dll文件怎么办。作为一位老师&#xff0c;我深知电脑技术对于现代人的重要性&#xff0c;而xinput1_3.dll文件的丢失则是许多电脑用户在游戏、办公等方面遇到的问题。因此&#xff0c;我…

Apipost:为什么是开发者首选的API调试工具

文章目录 前言正文接口调试接口公共参数、环境全局参数的使用快速生成并导出接口文档研发协作接口压测和自动化测试结论 前言 Apipost是一款支持 RESTful API、SOAP API、GraphQL API等多种API类型&#xff0c;支持 HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外…

华为OD机试 - 硬件产品销售方案 - 回溯(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、补充说明五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;…

EasyAVFilter的初衷:把ffmpeg.c当做SDK来用,而不是当做EXE来用

之前我们做一个视频点播的功能&#xff0c;大概的流程就是将上传上来的各种格式的视频&#xff0c;用FFmpeg统一进行一次转码&#xff0c;如果probe到视频的编码格式是H.264就调用-vcodec copy&#xff0c;如果probe到视频的编码格式不是H.264就调用-vcodec libx264&#xff0c…

使用delphi XE10.3.2 开发linux 上的Daemon

delphi 10.3.2支持linux, 而且官方只是支持命令行编程,目地就是做linux 服务器端的开发。 既然是做linux服务器端的开发,那么普通的命令行运行程序,然后等待开一个黑窗口的方式就 太low了(目前就有个别语言大咖,经常在Windows 上开个黑窗口,看起来非常恶心),那么如果…

网站常见安全漏洞 | 青训营

Powered by:NEFU AB-IN 文章目录 网站常见安全漏洞 | 青训营 网站基本组成及漏洞定义服务端漏洞SQL注入命令执行越权漏洞SSRF文件上传漏洞 客户端漏洞开放重定向XSSCSRF点击劫持CORS跨域配置错误WebSocket 网站常见安全漏洞 | 青训营 网站常见安全漏洞-网站基本组成及漏洞定义…

【python爬虫】—图片爬取

图片爬取 需求分析Python实现 需求分析 从https://pic.netbian.com/4kfengjing/网站爬取图片&#xff0c;并保存 Python实现 获取待爬取网页 def get_htmls(pageslist(range(2, 5))):"""获取待爬取网页"""pages_list []for page in pages:u…

Rn实现省市区三级联动

省市区三级联动选择是个很频繁的需求&#xff0c;但是查看了市面上很多插件不是太老不维护就是不满足需求&#xff0c;就试着实现一个 这个功能无任何依赖插件 功能略简单&#xff0c;但能实现需求 核心代码也尽力控制在了60行左右 pca-code.json树型数据来源 Administrative-d…

【Linux】基础IO

目录 一、回顾C语言文件操作二、文件系统调用接口1. open2.write3.read 三、文件描述符四、重定向1.输出重定向2.输入重定向 五、dup2 一、回顾C语言文件操作 1 #include<stdio.h>2 #include<stdlib.h>3 4 #define LOG "log.txt"5 6 int main()7 {8 //…