【Golang 面试算法二叉树 手动建树】

2023-10-28

Golang 面试算法二叉树 手动建树

前言

面试中有很多有关二叉树的题目,且需要手动建树,这里记录一下如何用Golang来快速构建一个二叉树。

代码实现

我们知道二叉树可以扁平化到数组中,当前节点的左右子节点的在数组中的下标可以表示为

leftIndex := currIndex * 2 + 1

rightIndex := currIndex * 2 + 2

其中currIndex表示当前节点在数组中的下标,基于此我们可以构建二叉树。

Node节点数据结构

type Node struct {
	Val         int
	Left, Right *Node
}

buildTree方法

// buildTree 构建树并且返回树的头节点
// arr 树节点的扁平化数组,其中-1表示空节点
// index 当前节点在数组中的下标
// n 数组长度
func buildTree(arr []int, index, n int) *Node {
	if n == 0 || index >= n || arr[index] == -1 {
		return nil
	}
	return &Node{
		Val:   arr[index],
		Left:  buildTree(arr, index*2+1, n),
		Right: buildTree(arr, index*2+2, n),
	}
}

验证
使用层序遍历输出构建完成的树,来验证一下

func bfs(root *Node) {
	if root == nil {
		return
	}
	q := []*Node{root}
	for len(q) > 0 {
		size := len(q)
		for i := 0; i < size; i++ {
			node := q[0]
			q = q[1:]
			fmt.Printf("%v ", node.Val)
			if node.Left != nil {
				q = append(q, node.Left)
			}
			if node.Right != nil {
				q = append(q, node.Right)
			}
		}
		fmt.Println()
	}
}

func main() {
	arr := []int{0, 1, 2, 3, 4, -1, 6}
	root := buildTree(arr, 0, len(arr))
	fmt.Println("---层序---")
	bfs(root)
	/* 树结构:
	             0
	         1       2
	       3  4   null 6
	   
	   输出结果:
	   ---层序---
	   0
	   1 2
	   3 4 6
	*/
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Golang 面试算法二叉树 手动建树】 的相关文章

随机推荐

  • 使用Google Play服务的Android定位

    Welcome to android location using google play services example Today we will learn how to use Google Play services API t
  • 简单的Tensorflow(6):MNIST数据集的简单应用

    The MNIST database的全称是Mixed National Institute of Standards and Technology database是一个手写数字数据库 它有60000个训练样本集和10000个测试样本集
  • 如何利用Typora在Csdn写文章(MarkDown基本语法)

    如何利用Typora在Csdn写文章 MarkDown基本语法 1 首先需要在你的电脑安装typora编辑器 程序员专用 目前新版是收费的 我用的0 9版本 不收费 可以自己去网上搜索并下载安装 安装后 打开就是这样一个效果 2 typor
  • leetcode 704题 [二分查找binarysearch]

    leetcode 704题 二分查找binarysearch 题目要求 输入 数组 目标数据 输出 目标数据在数组中的下标值 前提是该数组已经有序且没有重复元素 class Solution public int search vector
  • 树莓派spi转can通信之C编程实现(二)

    一 相关库的安装 wiringPi 链接网址 http wiringpi com 一个函数库 在编程时节省底层汇编以操作pi的功能引脚 对pi的引脚也进行了再次编号 BCM2835 C Library 链接网址 http www airsp
  • python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词

    python用来批量处理一些数据的第一步吧 对于我这样的的萌新 这是第一步 encoding utf 8 file test txt fn open file r printfn read fn close 在控制台输出txt文档的内容 注
  • python学习004-----python中%s的各种用法

    在python输出语句中 我们常用到 s 符号 s作用是将对象传到str 方法中进行处理 输出字符串 例如 str 12345 print 下面输出一串数字 s str 运行结果如下 这是 s最基本的用法 s还有很多不太常用的变形如下 1
  • Mybatis plus:Caused by: Error creating bean with name 'sqlSessionFactory' defined in class path reso

    整合springboot mybatisplus时报错 java lang IllegalStateException Failed to load ApplicationContext at org springframework tes
  • Mysql 存在既更新,不存在就添加(sql语句)

    版权声明 本文为勇哥原创文章 转载请注明出处哦 https blog csdn net woshihaiyong168 article details 75082668 INSERT 语句的一部分 如果指定 ON DUPLICATE KEY
  • 官方下载 sqlite 数据库,JDK Java开发工具包,Eclipse 跨平台开源集成开发环境 流程。

    官方下载 sqlite 数据库 JDK Java开发工具包 Eclipse 跨平台开源集成开发环境 流程 这两天下载IT编程的开发工具 开发包等 由于英文不好 在官方网址折腾了一些时间 现 在写出流程来 让后来人不再浪费宝贵的时间下载 1
  • [NOI 2014复习]斜率优化(BZOJ 1096、BZOJ 1010)

    1 BZOJ 1096 仓库建设 题目链接 http www lydsy com JudgeOnline problem php id 1096 思路 令 f i 1 i f i 1 i 区间 在第i个工厂建立仓库 所需最少总花费 DP方程
  • 【C语言】小游戏系列——扫雷(内含详细过程)

    我相信扫雷大家并不陌生 小时候经常玩 深受大家的喜欢 今天我们用c语言来编写一个简单的扫雷小游戏 在C语言的学习中 就应该用一些有趣的代码来激励我们 增加我们对编程的热爱 下面我来讲述如何去实现一个扫雷小游戏 正片开始 目录 1 游戏规则
  • 机器学习中的名词解释(一):监督学习、无监督学习、半监督学习、自监督学习(通俗理解)

    机器学习中有几个带有 监督 二字的名词 易混淆 写篇博客解释一下下 1 监督学习 Supervised Learning 是指从标注数据中学习预测模型的机器学习方法 其本质是学习输入到输出的映射的统计规律 映射 两个集合中元素相互对应的关系
  • 远程注册表访问

    远程注册表访问 注册表访问控件 Registry Access控件 是一个用VC编写的Server Component 它封装了对注册表的所有操作 通常用来扩展VB或其它编程工具的注册表访问功能 系统管理员可以把它嵌入ASP页面中 从而实现
  • QT笔记- 在指定目录创建自定义类型的文件

    函数 过程分为两步 指定包含目录的文件名 和 创建文件 使用的类是QFile类 用到的函数如下 QFile QFile const QString name bool QFile open QIODevice OpenModeFlag mo
  • N元线性函数拟合的C++实现

    一元线性方程可以看做是多元函数的特例 现在用矩阵形式表述多元函数情况下 最小二乘的一般形式 设拟合多项式为 各店到这条曲线的距离之和 即偏差平方和如下 对等式右边求ai的偏导数 得到 把这些等式表示成矩阵的形式 就可以得到下面的矩阵 3 进
  • 【Python开发】Flask开发实战:个人博客(四)

    Flask开发实战 个人博客 四 本篇博客将是 Flask开发实战 个人博客 的最后一篇 本篇文章将会详细介绍博客后台的编写 为了支持管理员管理文章 分类 评论和链接 我们需要提供后台管理功能 通常来说 程序的这一部分被称为管理后台 控制面
  • 程序运行时的存储结构

    程序运行时的存储结构 目标程序在目标机器环境下运行时 只是在自己的运行时的存储空间内完成执行 通常 在有操作系统的情况下 程序在自己的逻辑存储空间内存储和运行 因此 编译程序在生成目标代码时应该明确程序的所有对象在逻辑存储空间是如何存储的
  • 安装完Ubuntu 17.10后要做的几件事

    前几天Ubuntu 17 10终于出来了 正好前几天我电脑重装系统 顺便留了一个分区用来装Linux 所以就在我电脑上安装了Ubuntu 17 10 安装过程就不说了 图形化安装程序 基本安装过几次就熟悉了 所以重点 还是安装完成之后的美化
  • 【Golang 面试算法二叉树 手动建树】

    Golang 面试算法二叉树 手动建树 前言 代码实现 前言 面试中有很多有关二叉树的题目 且需要手动建树 这里记录一下如何用Golang来快速构建一个二叉树 代码实现 我们知道二叉树可以扁平化到数组中 当前节点的左右子节点的在数组中的下标