赞
踩
C语言实现以下二叉树
前序遍历:先输出根节点,在遍历左子树,最后右子树(根、左、右)
中序遍历:先遍历左子树,在输出根节点,最后右子树(左、根、右)
后序遍历:先遍历左子树,在遍历右子树,最后根节点(左、右、根)
代码如下(示例) :
- // 二叉树.cpp
-
- #include <stdio.h>
- #include <stdlib.h>
-
- //定义数据类型
- typedef char DataType;
-
- //定义二叉树
- typedef struct bittree {
- DataType data;
- struct bittree* lchild, * rchild; //左右子树节点指针
- }BinTree;
-
-
- //--------------函数声明---------------
-
- BinTree* CreateBinTree(BinTree* T); //前序创建二叉树
- void preOrder(BinTree* T); //前序遍历
- void InOrder(BinTree* T); //中序遍历
- void PostOrder(BinTree* T); //后序遍历
-
- //-------------------------------------
-
- int main()
- {
- BinTree* T = (BinTree*)malloc(sizeof(BinTree)); //创建二叉树
- T = CreateBinTree(T); //接受返回的根结点地址
-
- printf("前序遍历:");
- preOrder(T); //前序遍历
- printf("\n"); //换行
-
- printf("中序遍历:");
- InOrder(T); //中序遍历
- printf("\n"); //换行
-
- printf("后序遍历:");
- PostOrder(T); //后序遍历
- printf("\n"); //换行
- return 0;
- }
-
-
- //先序创建二叉树
- BinTree* CreateBinTree(BinTree *T) {
- char data;
- printf("请输入当前节点数据:data = ");
- scanf_s("%c", &data,1);
- getchar(); //用来接收缓冲区内的“回车"
-
- if (data == '#') {
- T = NULL; //判断:如果输入的字符串是“#”,将指向孩子节点的指针置空
- }
- else {
- T = (BinTree*)malloc(sizeof(BinTree)); //malloc动态分配内存
- if ( T == NULL ) {
- printf("分配空间失败\n");
- return 0;
- }
- T->data = data;
- T->lchild = CreateBinTree(T->lchild); //接收左孩子节点地址,存放进 T->lchild 左指针内
- T->rchild = CreateBinTree(T->rchild); //接收右孩子节点地址,存放进 T->rchild 右指针内
- }
- return T;
- }
-
- //前序遍历二叉树
- void preOrder(BinTree* T) {
- if (T)
- {
- printf("%c ", T->data); //输出根节点数据
- preOrder(T->lchild); //遍历左子树
- preOrder(T->rchild); //遍历右子树
- }
- }
-
- //中序遍历二叉树
- void InOrder(BinTree* T) {
- if (T) {
- InOrder(T->lchild ); //遍历左子树
- printf("%c ", T->data); //输出根节点数据
- InOrder(T->rchild ); //遍历右子树
- }
- }
-
- //后序遍历
- void PostOrder(BinTree* T) {
- if (T) {
- PostOrder(T->lchild); //遍历左子树
- PostOrder(T->rchild); //遍历右子树
- printf("%c ", T->data); //输出根节点数据
- }
- }
输入:AB#DG###CE#H##F##
输出:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。