创建一棵二叉树
来源:互联网 发布:淘宝情趣内衣买家秀图 编辑:程序博客网 时间:2024/05/18 13:10
创建一棵二叉树并求其三种遍历序列
给定一颗二叉树的遍历序列我们创建相应的二叉链表. 我们在对二叉树进行遍历时都忽略了空子树, 所以我们在创建的时候用’#’来代替空子树, 空子树值为NULL, 详见下图:
如图所示, 我们知道他的先序序列为: abd#g###ce##fh###
于是我们用C语言完成上述数据结构:
#include <stdio.h>#include <stdlib.h>//#define ElemeType chartypedef struct BTNode{ char data; struct BTNode *lchild; struct BTNode *rchild;}BTNode;//先序创建二叉树BTNode *create(BTNode *T){ char ch; T = (BTNode*)malloc(sizeof(BTNode)); //T的地址分配失败 if(!T) exit(0); scanf("%c", &ch); if(ch=='#') T = NULL; else{ T->data = ch; T->lchild = create(T->lchild); T->rchild = create(T->rchild); } return T;}//先序遍历void preorder(BTNode *T){ if(T!=NULL){ printf("%c", T->data); preorder(T->lchild); preorder(T->rchild); }}//中序遍历void inorder(BTNode *T){ if(T!=NULL){ inorder(T->lchild); printf("%c", T->data); inorder(T->rchild); }}//后序遍历void postorder(BTNode *T){ if(T!=NULL){ postorder(T->lchild); postorder(T->rchild); printf("%c", T->data); }}//总体输出void displayOrder(BTNode *T){ printf("先序遍历节点输出如下: \n"); preorder(T); printf("\n"); printf("中序遍历节点输出如下: \n"); inorder(T); printf("\n"); printf("后序遍历节点输出如下: \n"); postorder(T); printf("\n");}int main(){ BTNode *T; printf("输入二叉树所有节点: "); T = create(T); displayOrder(T); return 0;}
运行结果如下:
阅读全文
1 0
- 创建一棵二叉树
- 创建一二叉树
- 创建一颗最小二叉查找树
- 一:二叉树的性质及创建
- C++创建二叉树(一)
- 如何创建一颗二叉链表的二叉树?
- 什么样的遍历序列组合可以唯一地创建一棵二叉树
- 给定一棵二叉树,创建含有某一深度上所有结点的链表
- 数据结构之——创建一棵二叉树并完成遍历
- 二叉树算法一之创建和遍历
- java实现创建一颗平衡二叉树
- Java 二叉树(一)普通方式的创建
- 《数据结构实战》创建一颗平衡二叉树
- 创建一颗最优二叉树(哈夫曼树)
- 第九周 项目一 创建二叉树算法库
- 建立一棵二叉树
- 翻转一棵二叉树
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- PHP单例模式
- hdu-Sort 二分
- js初学——获取用户数据地址参数
- Hibernate学习---第五节:hibernate二级缓存
- Hibernate学习---第六节:普通组件和动态组件
- 创建一棵二叉树
- Hibernate学习---第七节:数组&list&map&set的映射配置
- AngularJS的自定义服务
- CentOS7中安装Docker
- CentOS踩坑记录之ftp服务器搭建
- Jenkins CLI
- C/C++中将负数赋值给unsigned整形类型详解
- Codeforces662C【字符串hash维护+DP】
- hdu-5726 GCD 思维||二分