| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 根据数组创建二叉树【DS + C++】 -> 正文阅读 |
|
|
[数据结构与算法]根据数组创建二叉树【DS + C++】 |
根据数组创建二叉树【DS + C++】前言
知识点——二叉树二叉树是树的一种,而树相较于图,算是一种较为直观的数据结构,一棵完整的树包括根节点,中间节点,以及叶子节点。根节点是树的开始节点,有子节点,没有父节点,叶子节点是指树的最底层,子节点指向空,其实就是没有子节点,有父节点,而中间节点则是既有子节点也有父节点。当然这些节点的定义和解释基于一个前提:该树的节点树 > 1。而对于一棵树,题目往往会给出根节点 root,因为树的任一个节点都只能通过自身去访问子节点,而不能访问父节点,所以为了能够访问整颗树,往往会给出根节点。欸?单向访问,听起来和我们之前学过的单链表是不是很类似呢?只不过单链表的节点只有next后向指针,指针指向下一个节点,而树的子节点指针却是可以有多个。 树的结构图
那么二叉树其实就很好理解了,二叉树其实就是每个节点都有两个子节点,分别为 left 和 next,两个指针,指向子节点。当然叶子节点的left和right自然指向空。 我之前写过一篇题解,当然那一篇并不是二叉树,而是n叉树,其实n叉树就是二叉树的 plus 版本,每个节点有n个子节点,相信聪明的你看到这里一定知道n个节点指针是以数组的形式存储了吧。
根据数组创建二叉树像我们平时在做leetcode或者牛客的题目的时候,往往题目给的数据并不是直接给一个数据指针啥的,而是会以数组的形式给出,如下图。
这里请忽略输出和解释哈。 数组中的null表示当前位置为空,也就是val=2的left节点是空的。 我们的任务就是要对形如这样的数组的数据,构造一个二叉树。 核心代码(C++)首先我们要先定义树的节点
然后由于输入中有null字样,我们需要使用字符串数组,存储输入。 在我们构建的时候需要先对字符串判断是否是null,如果不是则利用sstream库(字符串流)的stoi()函数,将字符串转换为int整数。然后再用整数生成相应节点。 而在构建树的时候,我们观察输入的数组,其实不难发现这是一个按BFS顺序的树的节点遍历顺序。所以我们可以使用对列去存储节点,然后以 BFS 的方式构建数组。 在构建完数组之后我们还可以使用还是 BFS 的方法,将整颗树输出展示出来。 下面是完整代码,请忽略Solution部分,这是leetcode一道题目的题解代码。 Code(C++)
后话
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/19 19:24:25- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |