二叉树的遍历。选择某种存储结构,建立一棵二叉树,并实现二叉树的4种遍历算法(先序、中序、后序、层序)

匿名网友 |浏览1272次
收藏|2019/09/05 11:45

满意回答

2019/09/05 11:59

这个是数据结构最基础的内容,任何一本数据结构教程上都有例子的(网上更多),我有的一个参考#include <stdio.h>#include <malloc.h>typedef char DataType; /*设数据域类型为字符型*/typedef struct node{ DataType data; struct node *lchild, *rchild; /*左右链域为指向结点结构的指针类型*/} BinTNode; /*结点类型*/typedef BinTNode *BinTree; /*指向二叉树结点的指针类型*/int count; /*全局变量用于统计结点个数*/void CreateBinTree(BinTree *T);void Preorder(BinTree T);void Inorderout(BinTree T) ;void Postorder(BinTree T) ;main(){ BinTree T; printf("请按带空指针的二叉树先序输入建立二叉树存储的结点序列:\n"); CreateBinTree(&T); printf("该二叉树的先序遍历序列为:\n"); Preorder(T); printf("\n该二叉树的中序遍历序列为:\n"); Inorderout(T); printf("\n该二叉树的后序遍历序列为:\n"); Postorder(T);}void CreateBinTree(BinTree *T){ /*以加入结点的先序序列输入,构造二叉链表*/ char ch; scanf("\n%c", &ch); if(ch == '0') *T = NULL; /*读入0时,将相应结点置空*/ else { *T = (BinTNode*)malloc(sizeof(BinTNode)); ; /*生成结点空间*/ (*T)->data = ch; CreateBinTree(&(*T)->lchild); ;/*构造二叉树的左子树*/ CreateBinTree(&(*T)->rchild); /*构造二叉树的右子树*/ }}void Preorder(BinTree T){ /*先序遍历二叉树T*/ if(T) { printf("%3c", T->data); /*访问结点数据*/ Preorder(T->lchild);; /*先序遍历二叉树T的左子树*/ Preorder(T->rchild);; /*先序遍历二叉树T的右子树*/ }}/*中序遍历二叉树T*/void Inorderout(BinTree T){ if(T) { Inorderout(T->lchild); /*中序遍历二叉树T的左子树*/ printf("%3c", T->data); /*访问结点数据*/ Inorderout(T->rchild); /*中序遍历二叉树T的右子树*/ }}/*后序遍历二叉树T*/void Postorder(BinTree T){ if(T) { Postorder(T->lchild); /*后序遍历二叉树T的左子树*/ Postorder(T->rchild); /*后序遍历二叉树T的右子树*/ printf("%3c", T->data); /*访问结点数据*/ }}

whoami1978

其他回答(1)
0人关注该问题
+1

 加载中...