二叉树创建和遍历 C++

二叉树的创建和遍历【c++】 前言:二叉树是什么? 二叉树是一种树形数据结构,其中每个节点最多有两个子节点,通常称为“左子节点”和“右子节点”。二叉树被广泛用于各种计算机科学应用中,例如表达式解析、搜索算法、排序、数据存储等。 主要特点 根节点:二叉树的顶层节点称为根节点。树中的所有其他节点都可以通过根节点到达。 子节点:每个节点可以有零、一个或两个子节点,分别称为左子节点和右子节点。 叶子节点:没有子节点的节点称为叶子节点,它们位于二叉树的底层。 高度:二叉树的高度是从根节点到叶子节点最长路径上的节点数。 二叉树的类型 阅读详情

描述

题目描述
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
输入描述:
输入包括1行字符串,长度不超过100。
输出描述:
可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

示例1

输入
abc##de#g##f###
输出
c b e g d f a

分析

就是根据前序字符串建立二叉树,然后再中序遍历。关键在建立,新建树的BitNode类型,然后递归建树

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
char tree[105];
using namespace std;
typedef struct node {
    char data;
    struct node * lchild;
    struct node * rchild;
}BitNode;
int len = 0;
int pos = 0;
BitNode* createTree()
{
    if (pos >= strlen(tree))return NULL;
    if (tree[pos] == '#') { pos++; return NULL; }
    else {
        BitNode * T = new BitNode;
        T->data= tree[pos++];
        T->lchild = createTree();
        T->rchild = createTree();
        return T;
    }
}
void Inorder(BitNode*T)
{
    if (T != NULL)
    {
        Inorder(T->lchild);
        cout << T->data<<" ";
        Inorder(T->rchild);
    }
}
int main()
{
    while (~scanf("%s", tree))
    {
        pos = 0;
        BitNode * T = createTree();
        Inorder(T);
        cout << "\n";
    }
}

补充

前序遍历:

void PreOrder(BitNode * T)
{
  if(T!=NULL){
cout<<T->data<<" ";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}

后序遍历

void PostOrder(BitNode * T)
{
 if(T!=NULL){
  PostOrder(T->lchild);
  PostOrder(T->rchild);
  cout<<T->data<<" ";
}
}

以广义表的形式输出二叉树:

void printBinTree(BitNode * T){
 if(T!=NULL)
 {
  cout<<T->data;
  if(T->lchild!=NULL || T->rchild!=NULL)
  {  cout<<'(';
      printBinTree(T->lchild);
      cout<<',';
      if(T->rchild!=NULL)printBinTree(T->rchild);
      cout<<')';
   }
}
}

计算一颗二叉树的高度

int Height(BitNode * T)
{
 if(T==NULL) return 0;
  else{
  int i = Height(T->lchild);
  int j = Height(T->rchild);
  if(i<j)return j+1;
  else return i+1
}
}

一些性质:
1、二叉树的第i层,最多有2^i-1个结点
2、深度为k的二叉树最少有k个结点,最多有2^k-1个结点
3、具有n个结点的完全二叉树的深度为log2(n+1)
4、结点i所在层次为log2i+1

从零到一:基于PX4+Gazebo+ROS2的无人机轨迹跟踪仿真环境全栈搭建 本文详细介绍了在Ubuntu 22.04系统上,从零开始搭建基于PX4、Gazebo Garden和ROS2 Humble的无人机轨迹跟踪仿真环境的完整流程。内容涵盖PX4 SITL编译、Gazebo安装、ROS2配置、Micro XRCE-DDS Agent通信桥接以及QGroundControl地面站部署,并提供了创建自定义ROS2节点实现圆形轨迹跟踪的实战代码与关键调试技巧,帮助开发者快速构建全栈仿真开发环境。 阅读详情

相关推荐

基于eBPF和LSM的强制文件访问控制系统架构设计和实现

本文介绍了一种基于 eBPF 与 Linux 安全模块(LSM)实现的强制文件访问控制系统。该系统利用 eBPF 的高性能和动态加载能力以及 LSM 的系统调用拦截功能,提供了灵活且强大的文件访问控制策略。文章详细描述了系统的设计思路、架构组成、关键代码实现及错误处理方式。通过用户空间程序与内核态 eBPF 程序的协作,实现了对文件操作的实时监控和控制,支持动态更新安全策略而无需重启系统。此外,文中还讨论了未来可能的扩展方向,如增加更多 hook 点、集成其他安全模块以及性能优化等。

Linux内核研究者 1839

数据结构--4.1 二叉树的创建与遍历

二叉树的创建与遍历二叉树的创建结构体定义初始化创建子树字符串转化为二叉树``二叉树的遍历层次遍历前中后序遍历测试代码运行结果总结 二叉树的创建 结构体定义 #include <stdio.h> #include <malloc.h> #define QUEUE_SIZE 5 typedef struct BTNode{ char element; BTNode* left;//左儿子 BTNode* right;//右儿子 }BTNode,*BTNODE; typed

m0_63944721的博客 2310

Cursor集成Claude 4.6免费版:本地IDE合规调用指南

大语言模型编程助手(LLM Copilot)已成为现代开发标配,其核心能力依赖于上下文理解、代码推理与结构化输出等关键技术原理。Anthropic官方提供的Claude系列模型,尤其Claude 4.6,凭借200K超长上下文、tool use函数调用和严格可控的API设计,在工程实践中展现出显著技术价值。该能力可无缝嵌入本地IDE环境,支撑代码解释、跨文件分析、单元测试生成等高频开发场景。本文聚焦Cursor这一开源可审计IDE,详解如何合规复用Anthropic免费tier接口(/v1/messages

weixin_34095889的博客 536

二叉树的创建和遍历

二叉树的创建及其遍历(牛客)

weixin_69081438的博客 582

1998年高教社杯全国大学生数学建模竞赛 B 题:《灾情巡视路线》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 883

Python 爬虫实战:手机应用商店评论数据爬取与分析

移动应用市场蓬勃发展,用户的评论数据包含了大量有价值的信息,如用户满意度、功能反馈、改进建议等。通过分析这些评论,我们可以挖掘应用的优缺点,甚至预测用户趋势。由于 Apple App Store 评论是动态加载的,我们使用。本篇博客将详细介绍如何使用 Python 爬取。爬取大量数据时,可能会遇到反爬机制。库获取 Google Play 评论。评论数据是动态加载的,需要使用。

2201_76125261的博客 2322

二叉树的构建与遍历(C语言)

目录 一、二叉树的存储结构 二、二叉树的遍历 一、二叉树的存储结构 1.顺序存储: 顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空 间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺 序存储在物理上是一个数组,在逻辑上是一颗二叉树。 2.链式存储 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存

Enthusiastic_boy的博客 4993

将Dify平台开发的工作流集成到Open WebUI中

将Dify开发的工作流集成到Open WebUI是一个能够显著增强AI应用交互能力和业务逻辑深度的有效途径。其核心在于通过API建立两者间的通信桥梁,并确保API在格式、协议和行为上的一致性,特别是向OpenAI Chat API规范看齐。最简单直接的路径是利用Dify的“对话型”或“Agent型”应用,这类应用的API设计更倾向于满足Open WebUI这类聊天前端的期望。然而,面对复杂的现实场景,直接的完美兼容并非总是唾手可得。

形上得其象,形下合于数;阴阳自济,玄理自明。 2030

二叉树的创建以及四种遍历方式

二叉树的创建与四种便利方法

qq_57018268的博客 2532

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

【软件测试】人工智能(AI)在软件测试领域的应用

AI在软件测试领域的应用使测试过程更加自动化、高效和智能。它可以帮助测试团队减轻负担,更快地识别和修复问题,最终提高软件的质量和可靠性。随着AI技术的不断进步,未来AI在软件测试领域的应用将更加广泛和深入。

weixin_46453070的博客 4383

二叉树的创建及遍历方法

在这里我们发现,我们每次存储时,基本上都是按照从上到下,从左到右的方式进行存储的,所以,我们此处存储数据时,可以先把根节点下面的左子树先存放完成,再存放右子树即可实现数据存储,并且,我们存放玩上一个数据之后的每一个节点都可以看做是一个根节点。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左孩子树和右孩子树组成的非空树;按照一般的存储逻辑,我们一般存储都是按照如下编号逐个存储,但是这样的存储方式不太适用于我们的链式存储,因此,这里我们需要使用到递归存储。......

m0_45901455的博客 4万+

反光柱定位算法中的移动机器人姿态计算原理-经典三边定位最小二乘法计算定位-直接法计算定位

(二)计算姿态方式是我们已经通过最小二乘得到了小车在地图中的位置或者是雷达在地图中的位置,又因为我们知道雷达与小车的安装坐标,所以可以求解出一其中一个坐标的知量,通过小车在地图中坐标与雷达在地图中坐标可以得到一条向量,通过计算向量在地图中的角度就能得到姿态了。与最小二乘三边测量法相比,新算法在动态调整、优化过程和鲁棒性方面优势明显,尤其适合动态环境下的机器人定位,而最小二乘三边测量法在动态复杂环境中精度相对较低。(一)与(二)的区别主要是在计算姿态上的算法不同。经典三边定位最小二乘法 (法一)

苏凯的博客 1139

【C++】二叉树的创建和遍历

1.前言 二叉树是一个双亲结点只有两个孩子结点,其遍历方法主要有: 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 2.代码 2.1.二叉树的建立 struct BiT_node { int data; struct BiT_node *lchild; //定义左右孩子指针 struct BiT_node *rchild; }; void CreatBinaryT...

要恰饭得嘛 711

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++ 二叉树的创建,和三种遍历方式的实现

#include<iostream> using namespace std; typedef struct BiTNode { string data; BiTNode* lchild, * rchild; }*BiTree; void creatBiTree(BiTree &p) { string S; cout << "请按照先序遍历的顺序输入数据,#代表NULL:"; cin >> S; if (S =="#") { (p) = NUL

weixin_43975276的博客 1784

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

二叉树的创建和遍历---C++实现

1. 二叉树概念 二叉树是一颗树,其中每个节点都不能有多于2个的子树,一般会有左子树和右子树,两者均可能为空。 二叉树实际上是图。 2. 二叉树节点和类的声明 创建树之前需要先声明一个树的结点。 //声明树结点 typedef struct node { char element; //结点值 struct node* left; //左子树 struct node* right...

一位媛的修炼之路 958

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

二叉树的创建和遍历 C/C++

#include<cstdio> #include<malloc.h> #include<iostream> using namespace std; typedef char Elemtype; typedef struct BiTnode{ char data; struct BiTnode* lchild; struct BiTnode* rchild; }BiTnode,*BiTree; //前序创建二叉树 void BiTree_creat(BiTre.

老6 371

二叉树的创建和遍历C++实现

#ifndef _BiTree #define _BiTree #include #include #include using namespace std; struct BiNode { char data; struct BiNode *left,*right; }; class BiTree { public: BiTree(); ~BiTree(); BiNode *g

daer520的专栏 982

C++实现二叉树的创建和遍历

实现二叉树的创建和遍历:1、实现二叉树的创建,存储结构为二叉链表结点类型。2、创建后实现先序中序后序的遍历结果。

m0_62367990的博客 1481

C++ 创建和遍历二叉树

一个简单的创建和遍历二叉树的C++程序,二叉树的其他操作程序待更新。 #include <iostream> using namespace std; struct BiTNode{ char data; struct BiTNode *lchild, *rchild;//左右孩子 }; BiTNode*T; void CreateB...

weixin_30432179的博客 101

【C++二叉树创建和遍历】

学习内容: 分别用递归和非递归实现二叉树的先序,中序,后序遍历 二叉树的创建 先序:头左右 中序:左头右 后序:左右头 要点: 递归方式遍历时,先序是第一次进入函数就打印,先打印的是头结点然后再打印左节点和右节点。中序是第一次回到函数时打印,此时左节点已经打印,当前打印的是头结点,之后再打印右节点。后序是第二次回到函数时打印,此时左右节点都已打印,当前打印的是头结点。 1 / \ 2

m0_49024672的博客 4378

二叉树的创建和遍历(c++版本)

前言 关于其创建考虑到前中后三种都是无法单独通过一种方式就能确定二叉树的形状的,所以这里考虑以层序遍历的方式来创建二叉树,至于二叉树的非递归遍历,主要时利用栈来模拟递归时的隐藏栈来实现的,可以去力扣上的深度优先搜索专题上看到其非递归版本。 代码 #include<iostream> #include<vector> #include<queue> #include<stack> using namespace std; struct TreeNode{ in

qq_50271250的博客 1008

C++实现的二叉树创建和遍历,超入门邻家小女也懂了

所有层的节点都达到最大数量,叶子除外的所有节点都有两个子节点,所有叶子都在最底一层(k)且数目为2^(k - 1)。如果删除最底一层的所有叶子它就是满二叉树,即除了最后一层,每层节点都达到最大数量 ,即有深度k的个节点数在左闭右开【2^(k-1)+1,2^k-1】区间内。1. 具有N个节点的完全二叉树的深度为[log2 N]+1,其中[x]为高斯函数,截尾取整。(3)若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。(1)如果i=1,则节点i是二叉树的根,无双亲......

汉阳Hann's Home 1万+

C语言和C++实现二叉树的#创建以及非递归遍历

尝试多次并学习了别人的程序后,实现了C和C++的井号创建法(注意直接在控制台的同一行输入所有字符,最后要多加一个#号),不传参的写法比较简单(左右子树要递归赋值),传参的话在C程序中需要用到二级指针而且递归内部的写法不同(不赋值,递归处理左右子树),在C++程序中用引用更加方便。遍历仍然是使用STL的pair和stack容器。

hou19975418的博客 293

C++中通过随机数和递归创建二叉树及先序遍历示例

iniBT函数用于创建二叉树,通过传入节点数量参数n,利用随机数生成来决定是否创建节点,若创建则为节点赋值并递归创建左右子树。

weixin_53323037的博客 332

C++ 层序创建二叉树及其四种遍历方式完整代码(递归法和迭代法)

先序遍历:先遍历根节点,再遍历左子树,最后遍历右子树(根-左-右)// 1 3 5 3 2 9 中序遍历:先遍历左子树,再遍历根节点,最后遍历右子树(左-根-右)// 5 3 3 1 2 9 后序遍历:先遍历左子树,再遍历右子树,最后遍历根节点(左-右-根)// 5 3 3 9 2 1 层序遍历:从上到下逐层、从左到右遍历 // 1; 3 2; 5 3 9

好像很好吃_博客 4038
上一篇: n的阶乘 C++
下一篇: 神奇的口袋--刚好装满背包的方法总数
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值