您好,登录后才能下订单哦!
这篇文章主要介绍“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语言二叉树的遍历方法怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。