C语言二叉树的遍历方法怎么实现

发布时间:2022-01-07 17:51:29 作者:iii
来源:亿速云 阅读:139

这篇文章主要介绍“C语言二叉树的遍历方法怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言二叉树的遍历方法怎么实现”文章能帮助大家解决问题。

     在本算法中先利用先序遍历创建了树,利用了递归的算法使得算法简单,操作容易,本来无printf("%c的左/右子树:", ch);的语句,但由于计算机需要输入空格字符来判断左右子树,为了减少人为输入的失误,特地加入这条语句,以此保证准确率。

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 3
 
typedef int Status;  
typedef int Boolean; 
typedef char TElemType;
 
typedef struct BiTNode{
	TElemType	   data;
	struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
 
//创建二叉树函数
 
Status CreateBiTree(BiTree &T){
	TElemType ch;
	scanf("%c", &ch);
	getchar();
	if(ch == ' '){	T = NULL;}
	else {
		if( !(T=(BiTree)malloc(sizeof(BiTNode))))(exit(OVERFLOW));
		T->data = ch;				
		printf("%c的左子树:", ch);
		CreateBiTree(T->lchild);		
		printf("%c的右子树:", ch);
		CreateBiTree(T->rchild);	}
	return OK;
}
 
//先序遍历函数
Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
	if(T){
		if(Visit(T->data)){
			if(PreOrderTraverse(T->lchild, Visit)){
				if(PreOrderTraverse(T->rchild, Visit)){
					return OK;
               }	
            }	
         }
		return ERROR;
    }
	else {return OK;}
}
 
//中序遍历函数
Status InOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
	if(T){
		if(PreOrderTraverse(T->lchild, Visit) ){
			if(Visit(T->data)){
				if(PreOrderTraverse(T->rchild, Visit) ){
					return OK;
           }
	   }	
   }
		return ERROR;
        }
	else {
		return OK;
        }
	}
 
//后序遍历函数
Status PosOrderTraverse(BiTree T, Status (* Visit)(TElemType e)){
	if(T){
		if(PreOrderTraverse(T->lchild, Visit) ){
			if(PreOrderTraverse(T->rchild, Visit) ){
				if(Visit(T->data)){return OK;
}
	}	
}
		return ERROR;}
	else {return OK;
}
}
 
 
//输出二叉树函数
Status PrintElement(TElemType e){	
	printf("%c",e);
	return OK;
}
 
//主函数
int main(){
	BiTree T;
	printf("输入根结点:");
	CreateBiTree(T);
	printf("先序遍历:\n");
	PreOrderTraverse(T, PrintElement);
	printf("\n");
	printf("中序遍历:\n");
	InOrderTraverse(T, PrintElement);
	printf("\n");
	printf("后序遍历:\n");
	PosOrderTraverse(T, PrintElement);
	return 0;
}

       遍历操作有四种,其不同在于对根结点的访问顺序不同。在先序遍历中,首先访问根结点,然后递归地做左子树的先序遍历,然后是右子树的递归先序遍历。 在中序遍历中,递归地对左子树进行中序遍历,访问根结点,最后递归中序遍历右子树。在后序遍历中,递归地对左子树和右子树进行后序遍历,然后访问根结点。先序,中序,后序遍历就是对于根节点的访问顺序。

       但无论哪种遍历方式,递归的方法是最简便,最直接,最简单的算法。

      运行截图:

C语言二叉树的遍历方法怎么实现

关于“C语言二叉树的遍历方法怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

推荐阅读:
  1. 用java实现二叉树的遍历算法
  2. 非递归实现二叉树的遍历(前序、中序、后序)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:使用java的milo框架访问OPCUA服务的过程是怎样的

下一篇:postman模拟post请求的四种请求体分别是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》