C++数据结构X篇_18_二叉树的创建(根据遍历结果创建二叉树;#号法创建树)

本篇将会介绍二叉树的创建,重点学习#号法创建树的方法。

文章目录

  • 1. 根据遍历结果创建二叉树(只需记住结论即可)
    • 1.1 首先有一个问题,根据中序遍历的结果能确定一棵树吗?
    • 1.2 那如何才能确定一棵树?(带中序的可以确定一个树)
    • 1.3 举例
  • 2. #号法创建树(重点)
    • 2.1 什么是#号法创建树?
    • 2.2 #号法创建树的代码实现

1. 根据遍历结果创建二叉树(只需记住结论即可)

1.1 首先有一个问题,根据中序遍历的结果能确定一棵树吗?

举例:中序遍历结果为:“12345”,这个“12345”能确定一棵树吗?

请思考,会有多少种形状,树的形状能唯一确定吗?
在这里插入图片描述
从上面的结果可以看出,根据某一个遍历结果显然是无法确定树的形状的,这是因为你无法确认是左子树还是右子树。

1.2 那如何才能确定一棵树?(带中序的可以确定一个树)

结论:

  • 通过中序遍历和先序遍历可以确定一个树
  • 通过中序遍历和后续遍历可以确定一个树
  • 通过先序遍历和后序遍历确定不了一个树

1.3 举例

假设有两组结果:
先序遍历结果:A D E B C F
中序遍历结果:D E A C F B
根据先序遍历结果知道二叉树的根节点为A,从中序遍历结果知道二叉树的左子树为:DE,右子树为:CFB
结合分析先序和中序遍历结果,得到如下二叉树:
在这里插入图片描述

2. #号法创建树(重点)

2.1 什么是#号法创建树?

创建树,让树的每一个节点都变成度数为 2的树

先序遍历结果:124###3## (#代表null即空)
在这里插入图片描述

2.2 #号法创建树的代码实现

#include <iostream>
using namespace std;//定义二叉树节点
class binarynode
{
public:char ch;			 //节点数据域binarynode* lchild;  //左孩子binarynode* rchild;  //右孩子
};void recursion(binarynode* root)
{if (root == nullptr){return;}cout << root->ch;recursion(root->lchild);recursion(root->rchild);
}//创建树
binarynode* createBinaryTree()
{//清空输入缓存区fflush(stdin);//等待输入char ch;scanf("%c", &ch);binarynode* node;binarynode* lchild;  //左孩子binarynode* rchild;  //右孩子if (ch == '#'){node = nullptr;}else{lchild = createBinaryTree();rchild = createBinaryTree();	node = new binarynode;node->ch = ch;node->lchild = lchild;node->rchild = rchild;}return node;
}int main()
{//创建树binarynode* root=createBinaryTree();//打印树recursion(root);system("pause");return 0;
}

运行结果:分别输入124###3##对应字符得到一个二叉树输出

  1. 二叉树的创建

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

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

相关文章

基于springboot实现滴答拍摄影项目【项目源码+论文说明】计算机毕业设计

摘要 拍摄能让人放开自我、因看到不同的美景都想留下美好的记忆&#xff0c;有些人喜欢拍摄静物来表现宁静的氛围&#xff0c;通过小品类的照片&#xff0c;传达内心的情绪。而我更喜欢另一种方式&#xff0c;就是用长时间曝光把波动的海水或湖水雾化&#xff0c;拍摄出来的作…

React 路由总结 react-router-dom6+react-router-dom5

开题 单页面应用和多页面应用 SPA&#xff1a;单页面应用程序&#xff0c;整个应用中只有一个页面(index.html) MPA&#xff1a;多页面应用程序&#xff0c;整个应用中有很多页面(*.html) react路由 现在的前端应用大多都是SPA单页面应用程序&#xff0c;也就是一个HTML页面的…

Leetcode刷题笔记--Hot61-70

1--课程表&#xff08;207&#xff09; 主要思路&#xff1a; 用 in 记录每一门课程剩余的先修课程个数&#xff0c;当剩余先修课程个数为0时&#xff0c;将该课程加入到队列q中。 每修队列q中的课程&#xff0c;以该课程作为先修课程的所有课程&#xff0c;其剩余先修课程个数…

和鲸ModelWhale与中科可控X系列异构加速服务器完成适配认证,搭载海光芯片,构筑AI算力底座

AIGC 时代&#xff0c;算力作为新型生产力&#xff0c;是国家和企业构建竞争优势的关键。而随着传统计算方式无法满足新时代激增的算力需求&#xff0c;计算场景的多元化和计算应用的复杂化推动了 CPUGPU 异构平台的加速组建。在此全球激烈角逐的大趋势下&#xff0c;我国信创产…

LabVIEW中管理大型数据

LabVIEW中管理大数据 LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群&#xff0c;而无需C/C用户经常担心。但是&#xff0c;这种内存管理设计为绝对安全&#xff0c;因此数据被非常频繁地复制。这通常不会造成任何问题&#xff0c;但是…

公网使用PLSQL远程连接Oracle数据库【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址…

Flutter视图原理之StatefulWidget,InheritedWidget

目录 StatefulElement1. 构造函数2. build3. _firstBuild3. didChangeDependencies4. setState InheritedElement1. Element类2. _updateInheritance3. InheritedWidget数据向下传递3.1 dependOnInheritedWidgetOfExactType 4. InheritedWidget的状态绑定4.1. ProxyElement 在f…

潮玩IP助力环境保护,泡泡玛特发布行业首款碳中和产品

在今年的2023上海PTS国际潮流玩具展上&#xff0c;泡泡玛特正式发布了首款“碳中和”潮玩产品DIMOO X蒙新河狸手办&#xff08;下简称DIMOO河狸&#xff09;&#xff0c;通过环保主题与流行文化的联合&#xff0c;让年轻人知道野生动物保护有多种方式&#xff0c;同时以创新的设…

分布式服务的链路跟踪 Sleuth Micrometer zipkin OpenTelemetry

由来 在分布式应用开发过程中&#xff0c;一个请求会调用多个应用&#xff0c;会有那种需要知道各个应用之间耗时的想法&#xff0c;这样可以知道一个调用的总时长以及各个组件之间的处理耗时&#xff0c;后面方便定位问题。 理论依据 起源于 google dapper 论文 https://re…

微信小程序--小程序框架

目录 前言&#xff1a; 一.框架基本介绍 1.整体结构&#xff1a; 2.页面结构&#xff1a; 3.生命周期&#xff1a; 4.事件系统&#xff1a; 5.数据绑定&#xff1a; 6.组件系统&#xff1a; 7.API&#xff1a; 8.路由&#xff1a; 9.模块化&#xff1a; 10.全局配置&…

MySQL - 利用存储过程生成数据

建表语句 create table users (user_id int auto_incrementprimary key,username varchar(255) not null,email varchar(255) not null,password varchar(255) …

Go 存储系列:LSM存储引擎 LevelDB

概念介绍 LSM-Tree 被是一种面向写多读少应用场景的数据结构 &#xff0c;被 Hbase、RocksDB 等强力 NoSQL 数据库采用作为底层文件组织方式。 简单的LSM-Tree 包含 2 层树状数据结构&#xff1a; Memtable 并完全驻留在内存中&#xff08;假设 T0&#xff09; SStables 存储…