二叉树遍历应用之根据前序遍历建树

article/2025/8/28 0:21:04

文章目录

  • 题目描述
  • 题目分析及实现思路
    • 根据前序遍历序列建立二叉树
  • 题目实现完整代码

题目描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

示例:
输入:

abc##de#g##f###

输出:

c b e g d f a


题目分析及实现思路

由示例中给出的前序遍历序列,可以画出如下图所示二叉树。

    在这里插入图片描述
对于这个树的生成,大家可以自行模拟比对。

根据前序遍历序列建立二叉树

前序遍历即先遍历根结点,然后遍历左子树,再遍历右子树,按照根左右的顺序进行遍历。
根据这个性质,我们可以递归的定义建立二叉树的过程。

char str[101]; //存放输入的先序遍历字符串
BNode *Insert(){if(str[i] == "#"){  //空结点i++;return NULL;}else{//新建一个结点BNode *root = (BNode *)malloc(sizeof(BNode));root->data = str[i];root->left = NULL;root->right = NULL;i++;root->left = Insert();root->right = Insert();return root;}
}

题目实现完整代码

#include<stdio.h>
#include<malloc.h>
#include<string.h>typedef struct BNode{char data;struct BNode *left;struct BNode *right;
}BNode;char str[101]; //存放输入的先序遍历字符串
int i;
BNode *Insert(){if(str[i] == '#'){  //空结点,注意单个字符用' '而不能用" "i++;return NULL;}else{//新建一个结点BNode *root = (BNode *)malloc(sizeof(BNode));root->data = str[i];root->left = NULL;root->right = NULL;i++;root->left = Insert();root->right = Insert();return root;}
}void inOrder(BNode *root){if(root->left != NULL){inOrder(root->left);}printf("%c ",root->data);if(root->right != NULL){inOrder(root->right);}
}int main(){while(scanf("%s",str) != EOF){i = 0;BNode *root = Insert();inOrder(root);}return 0;
}

http://chatgpt.dhexx.cn/article/JUCIR30p.shtml

相关文章

已知二叉树前序遍历是ADCEFGHB,中序遍历是CDFEGHAB,要求画出二叉树的结构或写出后序遍历

笔试特别喜欢考这种题。先说一下思路。 首先&#xff0c;需要明白前序、中序、后序遍历&#xff1a; ①前序&#xff1a;根→左→右 ②中序&#xff1a;左→根→右 ③后序&#xff1a;左→右→根仅明白这个是不行的&#xff0c;还需要技巧。对于标题中的问题&#xff0c; 我们…

二叉树遍历(前序遍历、中序遍历、后序遍历)

1.说明 前序遍历: 先输出父节点&#xff0c;再遍历左子树和右子树 中序遍历: 先遍历左子树&#xff0c;再输出父节点&#xff0c;再遍历右子树 后序遍历: 先遍历左子树&#xff0c;再遍历右子树&#xff0c;最后输出父节点 小结: 看输出父节点的顺序&#xff0c;就确定是前序…

144. 二叉树的前序遍历

给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输入&#xff1a;root [1] 输出&a…

二叉树的前序遍历(C++)

二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a; root [1,null,2,3] 输出&#xff1a; [1,2,3]示例 2&#xff1a; 输入&#xff1a; root [] 输出&#xff1a; []示例 3&#xff1a; 输入&…

二叉树的前序遍历(C语言)

我们从两个方向讲解二叉树的前序遍历(递归迭代) 一.递归 思想: 从根节点开始向其左孩子遍历每经过一个节点记录一下该节点的数值(只在第一次经过该节点时进行记录),当走到NULL时返回上一个节点,然后遍历其右孩子,如果右孩子存在记录其数值,再重复上面操作,如果不存在为NULL直…

二叉树前序遍历--递归

前序遍历的概念&#xff1a;遍历顺序-根左右&#xff0c;从根节点往下查找&#xff0c;先找左子树、直至左子树为空(左子节点逐个入栈、直至左子节点为空)&#xff0c;再找右子树(出栈找右子节点)第一次经过节点即打印&#xff0c;直到打印null&#xff0c;往回溯&#xff0c;打…

二叉树前序遍历(递归以及非递归)

二叉树前序遍历 对于一种数据结构而言&#xff0c;我们最常见的就是遍历&#xff0c;那么关于二叉树我们该如何去遍历呢&#xff1f; 请看大屏幕 。。。。 上图是一棵二叉树&#xff0c;前序遍历结果&#xff1a;1 2 4 5 3 6 咦&#xff0c;我想你可能会疑惑什么叫做前序遍历…

二叉树前序遍历三种方式(c++ 实现)

一.递归 递归很简单&#xff0c;只要在调用子节点前对当前节点进行操作即可 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, …

数据结构二叉树前序遍历递归和非递归算法

2022.11.19 二叉树前序遍历递归和非递归算法 任务描述相关知识编程要求测试说明C/C代码 任务描述 本关任务&#xff1a;给定一棵二叉树&#xff0c;使用递归和非递归的方法实现二叉树的先&#xff08;前&#xff09;序遍历结果。 相关知识 为了完成本关任务&#xff0c;你需…

二叉树前序遍历(递归法和迭代法(即非递归法))——C++

声明&#xff1a;本文原题主要来自力扣力扣&#xff0c;记录此博客主要是为自己学习总结&#xff0c;不做任何商业等活动 本文主要讲解二叉树的前序遍历递归法和迭代法。中序遍历和后序遍历可以参考博主下面两篇博客&#xff1a;二叉树中序遍历&#xff08;递归法和迭代法(非递…

二叉树前序遍历-迭代

二叉树的前序遍历 对于一颗二叉树&#xff0c;当遍历它的时候使用 递归总是轻而易举的。这是二叉树前序遍历-使用递归 public void preorderTraversal(TreeNode root){if(rootnull)return;System.out.print(root.data" ");preorderTraversal(root.left);preorderT…

二叉树前序遍历执行过程

二叉树前序遍历执行过程 前序遍历&#xff1a;根-左-右 图示 记录与总结&#xff0c;2021年 11月 12日 星期五 11:35:14 CST。

二叉树的前序遍历

二叉树文章系列&#xff1a; 二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历二叉树的层序遍历二叉树的前序、中序、后序、层序遍历【解法完整版】 本文目录 一、解题思路&#xff1a;递归二、解题思路&#xff1a;迭代&#xff08;方法1&#xff09;三、解题思路&#xff…

二叉树的先序遍历

二叉树的概念 二叉树是一种特殊的树。二叉树的特点是每个节点最多有两个儿子&#xff0c;左边的叫左二子&#xff0c;右边的叫做右儿子&#xff0c;或者说每个结点最多有两棵子树&#xff0c;二叉树要么为空&#xff0c;要么由根节点、左子树和右子树组成&#xff0c;而左子树…

(数据结构)二叉树先序遍历

二叉树先序遍历 二叉树先序遍历的实现思想是&#xff1a; 访问根节点访问当前节点的左子树若当前节点无左子树&#xff0c;则访问当前节点的右子树 图 1 二叉树 以上图 1 为例&#xff0c;先序遍历的过程如下&#xff1a; 访问该二叉树的根节点&#xff0c;找到 1访问节点 1 …

【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎

【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎 1. 什么是Elasticsearch?2. 安装并运行Elasticsearch2.1 拉取镜像2.2 启动镜像 3. 安装kibana3.1 拉取kibana镜像3.2 启动kibana镜像 4. Elasticsearch基本概念索引&#xff08;Index&#xff09;文档&#xff08;Do…

【Elasticsearch】 es 搜索 返回信息 字段 解释

本文为博主九师兄&#xff08;QQ:541711153 欢迎来探讨技术&#xff09;原创文章&#xff0c;未经允许博主不允许转载。 文章目录 1.概述 1.概述 官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-request-body.html#request-body-search…

分布式搜索引擎 ElasticSearch(ES)

一、初识elasticsearch 1.了解ES 1&#xff09;elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elast…

Elasticsearch搜索引擎该怎么使用,这篇文章彻底讲透(荣耀典藏版)

目录 前言 一、先说说 Lucene 二、ES 核心概念 2.1、集群&#xff08;Cluster&#xff09; 2.1.1、发现机制 2.1.2、节点的角色 2.1.3、脑裂现象 2.2、分片&#xff08;Shards&#xff09; 2.3、副本&#xff08;Replicas&#xff09; 2.4、映射&#xff08;Mapping&…

ElasticSearch搜索引擎常见面试题总结

一、ElasticSearch基础&#xff1a; 1、什么是Elasticsearch&#xff1a; Elasticsearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎&#xff0c;每个字段都被索引并可被搜索&#xff0c;可以快速存储、搜索、分析海量的数据。 全文检索是指对每一个词建立一个索引&a…