C语言二叉树链表的建立及四种遍历方法
#include <stdio.h> #include <stdlib.h> //定义一个二叉树结构 typedef struct binode { char data; struct binode * lchild; struct binode * rchild; }BiTree; //前序遍历递归法建立二叉树算法 BiTree * CreatBiTree() { BiTree *T; char data; fflush(stdin); scanf("%c",&data); if (data=='$'){ //输入$符号则退出 return; } if(data=='#')T=NULL; else { T=(BiTree *)malloc(sizeof(BiTree)); T->data=data; T->lchild=CreatBiTree(); T->rchild=CreatBiTree(); } return T; } //按层遍历递归二叉树算法 void Layer_order(BiTree * TNode,BiTree ** F,BiTree ** R) //二级指针 { *F=TNode; //将当前节点放入队列首指针所指位置 printf("%c",(*F)->data); if((*F)->lchild!=NULL) { R=R+1; *R=(*F)->lchild; //节点的左儿子放入队尾 } if((*F)->rchild!=NULL) { R=R+1; //首指针向后移动一格 *R=(*F)->rchild; //节点的右儿子放入队尾 } if(F!=R) { F=F+1; Layer_order(*F,F,R);//递归 } } //前序遍历递归二叉树算法 void PreOrderTraverse(BiTree *T) { if(T==NULL) return; printf("%c", T->data); //显示结点数据,可以更改为其他对结点操作 PreOrderTraverse(T->lchild); //再先序遍历左子树 PreOrderTraverse(T->rchild); //最后先序遍历右子树 } //中序遍历递归二叉树算法 void InOrderTraverse(BiTree *T) { if(T==NULL) return; InOrderTraverse(T->lchild); //中序遍历左子树 printf("%c", T->data); //显示结点数据,可以更改为其他对结点操作 InOrderTraverse(T->rchild); //最后中序遍历右子树 } //后序遍历递归二叉树的算法 void PostOrderTraverse(BiTree *T) { if(T==NULL) return; PostOrderTraverse(T->lchild); //先后序遍历左子树 PostOrderTraverse(T->rchild); //再后续遍历右子树 printf("%c", T->data); //显示结点数据,可以更改为其他对结点操作 } int main() { BiTree ** F; //队首指针 指向指针的指针,因为队列数组里的元素全是指针 BiTree ** R; //队尾指针 二级指针 BiTree * Queue[1024];//队列数组 F=Queue; R=Queue; //开始时队首队尾指针重合 BiTree * root; //在main函数中建立一个二叉树根的指针 root=CreatBiTree(); //创建树 printf("按层遍历二叉树: \n"); Layer_order(root,F,R); //按层遍历树 printf("\n"); printf("前序遍历二叉树: \n"); PreOrderTraverse(root); printf("\n"); printf("中序遍历二叉树: \n"); InOrderTraverse(root); printf("\n"); printf("后序遍历二叉树: \n"); PostOrderTraverse(root); printf("\n"); return 0; }
二叉树模型图:
程序执行效果:
输出结果完全正确:
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751783.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?