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.mzph.cn/news/70028.shtml

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

相关文章

Go Web开发的高级技巧和最佳实践

Go Web开发的高级技巧和最佳实践 欢迎来到Go语言Web开发的高级技巧和最佳实践指南。在这篇文章中&#xff0c;我们将深入探讨Go语言Web应用程序的高级主题&#xff0c;包括性能优化、安全性、部署和微服务架构。 性能优化 性能是Web应用程序的关键因素之一。Go语言以其出色的…

eclipsejava

Linux eclipse java 明明是源码没问题&#xff0c;处理 utf-8 就是错误&#xff0c;只要加一行空格或其它无用语句&#xff0c;串串行&#xff0c;就正确了。神奇。

LeetCode 1123. 最深叶节点的最近公共祖先:DFS

【LetMeFly】1123.最深叶节点的最近公共祖先 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-deepest-leaves/ 给你一个有根节点 root 的二叉树&#xff0c;返回它 最深的叶节点的最近公共祖先 。 回想一下&#xff1a; 叶节点 是二叉树…

Android学习计划

安卓基础 Android Activity生命周期Application生命周期Android Service、IntentService&#xff0c;Service和组件间通信Activity的onNewIntentFragment的懒加载实现&#xff0c;参数传递与保存ContentProvider实例详解BroadcastReceiver使用总结Android消息机制Binder机制&a…

jmeter中的__setProperty用法

__setProperty 是一个用于设置 JMeter 属性的函数&#xff0c;基本语法&#xff1a; __setProperty(property, value)** property : 是要设置的属性的名称 ** value : 是要设置的属性的值在 JMeter中&#xff0c;可以使用 __setProperty 函数的元素&#xff1a; BeanShell …

Python3 简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Python 是一种解释型语言&#xf…

Leetcode.1123 最深叶节点的最近公共祖先

题目链接 Leetcode.1123 最深叶节点的最近公共祖先 rating : 1607 题目描述 给你一个有根节点 root 的二叉树&#xff0c;返回它 最深的叶节点的最近公共祖先 。 回想一下&#xff1a; 叶节点 是二叉树中没有子节点的节点&#xff1b;树的根节点的 深度 为 0 0 0&#xff0…

车内信息安全技术-安全技术栈-软件安全

操作系统 1.隔离技术 信息安全中的隔离技术通常指的是将不同安全级别的信息或数据隔离开来,以保护敏感信息不受未授权的访问或泄露。在操作系统中,常见的隔离技术包括:虚拟化技术:通过虚拟化软件,将物理计算机分割成多个独立的虚拟计算机,每个虚拟计算机都可以运行独立的…

实战:大数据Flink CDC同步Mysql数据到ElasticSearch

文章目录 前言知识积累CDC简介CDC的种类常见的CDC方案比较 Springboot接入Flink CDC环境准备项目搭建 本地运行集群运行将项目打包将包传入集群启动远程将包部署到flink集群 写在最后 前言 前面的博文我们分享了大数据分布式流处理计算框架Flink和其基础环境的搭建&#xff0c…

MySQL 用户授权管理及白名单

1.创建用户 在 MySQL 中&#xff0c;你可以通过以下步骤创建用户并设置白名单&#xff1a; 使用管理员账号连接到 MySQL 服务器。 创建新用户&#xff1a; CREATE USER usernamehostname IDENTIFIED BY password;其中&#xff0c; username 是你要创建的用户名&#xff1b;ho…

SpringBoot几个常用的注解

&#xff08;1&#xff09;RestController和Controller指定一个类&#xff0c;作为控制器的注解 &#xff08;2&#xff09;RequestMapping方法级别的映射注解&#xff0c;这一个用过Spring MVC的小伙伴相信都很熟悉 &#xff08;3&#xff09;EnableAutoConfiguration和Spri…

LeetCode73.矩阵置零

这道题我感觉还是挺简单的&#xff0c;一下子就想到了&#xff0c;不过我的算法很简单很垃圾&#xff0c;效率很低&#xff0c;我一看完题的想法就是直接遍历一遍数组&#xff0c;然后把为0的元素的行和列都存起来&#xff0c;然后把这些行和列都置零就好了&#xff0c;但是这里…

万物互联:软件与硬件的协同之道

在当今数字化时代&#xff0c;我们身边的一切似乎都与计算机和互联网有关。从智能手机到智能家居设备&#xff0c;从自动驾驶汽车到工业生产线&#xff0c;无论我们走到哪里&#xff0c;都能看到软件和硬件的协同作用。本文将探讨这种协同作用&#xff0c;解释软件和硬件如何相…

【Java】Java反射技术简介

Java反射技术是一种强大的工具&#xff0c;它允许在运行时检查和修改类的行为。通过反射&#xff0c;我们可以加载并操作类&#xff0c;创建对象&#xff0c;调用方法&#xff0c;获取和设置字段等。这种技术在Java编程中非常有用&#xff0c;特别是对于框架&#xff0c;工具和…

NIO原理浅析(二)

IO分类 阻塞和非阻塞 阻塞IO&#xff1a;用户空间引发内核空间的系统调用&#xff0c;需要内核IO操作彻底完成之后&#xff0c;返回值才会返回到用户空间&#xff0c;执行用户的操作。阻塞指的用户空间程序的执行状态&#xff0c;用户空间程序需要等到IO操作彻底执行完毕。j…

前端面试0906

// 请给出输出结果 function foo(){ console.log(a); } function bar(){ var a 3; console.log(this.a); foo(); } var a 2; bar(); 2 2 // 请从下面的问题中挑选3道进行回答 1. 防抖和节流分别是什么&#xff0c;一般用在什么场景&#xff1f; 防抖&#xff08;Debounc…

简易版人脸识别qt opencv

1、配置文件.pro #------------------------------------------------- # # Project created by QtCreator 2023-09-05T19:00:36 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET 01_face TEMP…

代码随想录笔记--二叉树篇

目录 1--递归遍历 1-1--前序遍历 1-2--中序遍历 1-3--后序遍历 2--迭代遍历 2-1--前序遍历 2-2--后序遍历 2-3--中序遍历 3--二叉树的层序遍历 4--翻转二叉树 5--对称二叉树 6--二叉树最大深度 7--二叉树的最小深度 8--完全二叉树节点的数量 9--平衡二叉树 10-…

MongoDB 数据库性能优化技巧

原文&#xff1a;MongoDB 数据库性能优化技巧 (techdatafuture.com) MongoDB 是一款灵活且可扩展的NoSQL数据库&#xff0c;为了提高其性能&#xff0c;我们可以采取一些优化技巧。本文将介绍一些MongoDB性能优化的关键点&#xff0c;包括索引的使用、查询优化、数据模型设计和…

Git基础命令

目录 一、关于Git1.什么是Git&#xff1f;2.Git优点3.什么是版本控制&#xff1f;4.版本控制工具5.版本控制软件的基础功能 二、Git基础命令1.init2.clone3.config4.status5.add 文件名6.commit -m 描述7.log8.branch分支名9.tag 一、关于Git 1.什么是Git&#xff1f; Git是一…