利用先序遍历输入法建立二叉树

这篇具有很好参考价值的文章主要介绍了利用先序遍历输入法建立二叉树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:假设二叉树结点的数据为字符,即

struct TreeNode { 

    char Data;

    struct TreeNode * Left;

    struct TreeNode * Right;

};

如果对该二叉树遍历打印并且以#代表空树,那么可以得到一个字符串,例如下面的二叉树:(注:设二叉树的结点数据不能为字符#)

利用先序遍历输入法建立二叉树

先序遍历结果为:ABC##DE##F###

编写程序,输入一个类似于上面先序遍历结果的字符串,根据此字符串建立二叉树。(算法可参考教材126页)验证该二叉树是否正确。

1.叉树/二叉排序树结构体:

struct TreeNode{
	int Data;
	struct TreeNode*Left;
	struct TreeNode*Right;
};

2.创建一颗空树:

Struct TreeNode*T;
T=NULL;

3.关于树节点的计算,高度的计算等请看我的另一篇文章(二叉树的实现1):

https://mp.csdn.net/mp_blog/creation/editor/122858841

4.利用先序遍历输入法建立二叉树:

struct TreeNode* Creat() {//在函数中不能进行传参
	struct TreeNode*T;
	printf("输入一个字符:\n");
	char  ch;
	scanf("%c",&ch);//一个一个字符的边输入边插入法
	getchar(); //消掉在scanf函数中自带的换行符


	if(ch=='#'){
		T=NULL;//如果输入的为‘#’,则代表该结点为空
	}else {
		T=malloc(sizeof(struct TreeNode));//否则创建一个结点
		T->Data=ch;//将输入的内容先存入根结点中
		T->Left=Creat();//再调用本身函数将再次输入的结点存入左子树中
		T->Right=Creat();//最后存入右子树中
	}
return T;	//返回插入内容后的树
}

实验源代码:

#include<stdio.h>
#include<stdlib.h>

struct TreeNode{
	char Data;
	struct TreeNode*Left;
	struct TreeNode*Right;
};
//按先序遍历的顺序建立二叉树 
struct TreeNode* Creat() {
	struct TreeNode*T;
	printf("输入一个字符:\n");
	char ch;
	scanf("%c",&ch);
	getchar(); 


	if(ch=='#'){
		T=NULL;
	}else {
		T=malloc(sizeof(struct TreeNode));
		T->Data=ch;
		T->Left=Creat();
		T->Right=Creat();
	}
return T;	
}
//先序遍历 
void Preorder(struct TreeNode*T){
	if(T!=NULL){
 		printf("%c",T->Data);
 		Preorder(T->Left);
 		Preorder(T->Right);
 	}
 	if(T==NULL)
	 printf("#"); 
}
//中序遍历 
void Inorder(struct TreeNode*T){
	if(T!=NULL){
	 	Inorder(T->Left);
 		printf("%c",T->Data);
 		Inorder(T->Right);
 	}
 	if(T==NULL)
	 printf("#"); 
}
//后序遍历 
void Postorder(struct TreeNode*T){
	if(T!=NULL){
 		Postorder(T->Left);
 		Postorder(T->Right);
 		printf("%c",T->Data);
 	}
	if(T==NULL)
	 printf("#"); 
}
void Print(struct TreeNode*T){
     printf("先序遍历为:");
	Preorder(T);
	printf("\n"); 
	
	printf("中序遍历为:");
	Inorder(T);
	printf("\n");
	
	printf("后序遍历为:");
	Postorder(T);
	printf("\n"); 
}
int  main(){
	struct TreeNode*T;

    T=Creat();
    
    Print(T);
    return 0;
}

实验结果:

利用先序遍历输入法建立二叉树

 完结撒花!!!!!!!!!!!!!!!!!!!!!!!!!!!文章来源地址https://www.toymoban.com/news/detail-444137.html

到了这里,关于利用先序遍历输入法建立二叉树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】二叉树的创建和遍历(先序、中序、后序)

    最近一段时间学习了数据结构中二叉树的基本操作,包括二叉树的结构、二叉树的创建、递归先序中序后序遍历、非递归遍历等,想着把二叉树的相关知识和自己的见解放到网上来让网友看看是否正确,想和网友一起共同交流。 先了解一下二叉树的三个基本性质: 性质1:在

    2024年02月04日
    浏览(45)
  • C语言完整代码实现:二叉树的先序遍历、中序遍历、后序遍历

    一、先序遍历原理        先序遍历就是: 根、左、右 ,也就是先遍历根结点再遍历左结点最后再遍历右结点,注意:如果遍历到的结点不是叶子结点的话需要对该结点进行拆分,比如这棵二叉树: 先遍历 A ,然后是 B ,然后再是 C ,但是由于B并不是叶子结点,他本身又是

    2024年02月07日
    浏览(50)
  • 二叉树的遍历(先序遍历,中序遍历,后序遍历)递归与非递归算法

    先序遍历:先遍历一颗树的根节点,后遍历左子树,最后遍历右子树     先序遍历序列: 1 - 2 - 4 - 5 - 3 - 6 - 7 分解子问题方法 思路:将一颗二叉树看做两个部分,一个部分是左路节点,另一个部分是左路节点的右子树,先将二叉树的左路节点全部入栈,再依次出栈,出栈的

    2024年02月14日
    浏览(40)
  • 二叉树先序,中序,后序遍历的非递归算法(一)

    思路: 二叉树的前序遍历过程: 从树根开始沿着左子树一直深入,直到最左端无法深入时,返回; 进入最近深入时遇到结点的右子树,再进行如此的深入和返回; 直到最后从根节点的右子树返回到根节点为止; 由其深入返回的过程我们知道可以用一个栈来帮助我们消除递

    2023年04月14日
    浏览(78)
  • 递归和迭代实现二叉树先序、中序、后序和层序遍历

    递归比较简单,直接上代码: ### 1.1 先序遍历 1.2 中序遍历 1.3 后序遍历 能够用递归方法解决的问题基本都能用非递归方法实现。因为递归方法无非是利用函数栈来保存信息,可以寻找相应的数据结构替代函数栈,同样可以实现相同的功能。下面用栈,类比递归方法来统一实

    2024年01月20日
    浏览(41)
  • 十三、数据结构——二叉树的遍历(先序、中序和后序)详细思路和代码

    在数据结构中,二叉树是一种常用且重要的数据结构。二叉树的遍历是指按照一定顺序访问二叉树的所有节点,常见的遍历方式有前序遍历、中序遍历和后序遍历。本文将详细介绍这三种遍历算法,并介绍最优二叉树。 首先,我们先来了解一下二叉树的基本定义。二叉树是每

    2024年02月15日
    浏览(43)
  • 【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

    一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2 i − 1 , i ≥ 1 i geq 1 i ≥ 1 每层最大结点可以对应完美二叉树(满二叉树),其所有分支结

    2024年02月20日
    浏览(45)
  • 数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q

    目录     二叉树的定义: *特殊的二叉树:  二叉树的性质:  二叉树的声明:   二叉树的先序遍历:  二叉树的中序遍历:  二叉树的后序遍历: 二叉树的层序遍历:  二叉树的节点个数: 二叉树叶节点个数:   最后完整代码: 运行结果:  二叉树是n(n≥0)个结点的

    2024年02月01日
    浏览(42)
  • C++ 二叉树(建立、销毁、前中后序遍历和层次遍历,寻找双亲结点等)

    (1) 结构体和类定义 (2)创建二叉树 (3)前中后序遍历和层序遍历 (4)复制二叉树 (5)销毁二叉树 (6)析构函数 (7)求树的高度 (8)获取结点,判断其是否在二叉树中 (9)计算结点个数和获取结点个数 (10)二叉树判空 (11)获取根结点 源代码: btree.h btree.cp

    2024年02月13日
    浏览(38)
  • Android同文输入法的使用(开源输入法Trime)

    想找一款开源的Android中文输入法,然后发现了这款备受推崇的输入法框架rime。 RIME/中州韵输入法引擎,是一个跨平台的输入法算法框架。 基于这一框架,Rime 开发者与其他开源社区的参与者在 Windows、macOS、Linux、Android 等平台上创造了不同的输入法前端实现。 这真的非常酷

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包