二叉树的链式结构实现
2015-05-13 00:14
381 查看
/*二叉树的链式结构实现 * * */ #include <stdio.h> #include <stdlib.h> struct TreeNode; typedef int ElementType; typedef char TElementType; typedef char* String; typedef struct TreeNode* PtrToNode; typedef PtrToNode Tree; String str = "ABDH#K###E##CFI###G#J##";/*前序遍历序列*/ ElementType index = 0; struct TreeNode{ TElementType data; Tree LChild; Tree RChild; }; Tree CreateBiTree();/*前序遍历法创建一棵二叉树*/ void Disptree(Tree T);/*凹入表示法输出二叉树* / void PreOrderTraverse(Tree T);/*前序遍历二叉树*/ void InOrderTraverse(Tree T);/*中序遍历二叉树*/ void PostOrderTraverse(Tree T);/*后序遍历二叉树*/ void TreeEmpty(Tree T);/*检查二叉树是否为空*/ void ClearTree(Tree T);/*清空一颗二叉树*/ int TreeDepth(Tree T);/*返回树的深度*/ TElementType Root(Tree T);/*返回根节点*/ /*前序遍历法创建一颗二叉树*/ Tree CreateBiTree(){ char ch = str[index++]; Tree T; if (ch == '#') T = NULL; else{ T = malloc(sizeof(struct TreeNode)); T->data = ch; T->LChild = CreateBiTree(); T->RChild = CreateBiTree(); } return T; } /*前序遍历二叉树*/ void PreOrderTraverse(Tree T){ if (T != NULL){ printf("%c ", T->data); PreOrderTraverse(T->LChild); PreOrderTraverse(T->RChild); } } /*中序遍历二叉树*/ void InOrderTraverse(Tree T){ if (T != NULL){ InOrderTraverse(T->LChild); printf("%c ", T->data); InOrderTraverse(T->RChild); } } /*后序遍历二叉树*/ void PostOrderTraverse(Tree T){ if (T != NULL){ PostOrderTraverse(T->LChild); PostOrderTraverse(T->RChild); printf("%c ", T->data); } } /*检查二叉树是否为空*/ void TreeEmpty(Tree T){ if (T == NULL) printf("二叉树为空"); else printf("二叉树不为空"); } //凹入表示法输出二叉树 void Disptree(Tree T) { if (T) { printf("%c", T->data); if (T->LChild || T->RChild) { printf("("); Disptree(T->LChild); if (T->RChild) printf(","); Disptree(T->RChild); printf(")"); } } } /*清空一颗二叉树*/ void ClearTree(Tree T){ if (T != NULL){ ClearTree(T->LChild); ClearTree(T->RChild); free(T); } return NULL; } /*返回树的深度*/ int TreeDepth(Tree T){ int left, right; if (T == NULL) return NULL; if (T->LChild != NULL) left = TreeDepth(T->LChild); else left = 0; if (T->RChild != NULL) right = TreeDepth(T->RChild); else right = 0; return left > right ? left + 1 : right + 1; } /*返回根节点*/ TElementType Root(Tree T){ if (T != NULL) return T->data; } void main(){ Tree T; T = CreateBiTree(); printf("凹入表示法:\n"); Disptree(T); printf("\n前序遍历:\n"); PreOrderTraverse(T); printf("\n中序遍历:\n"); InOrderTraverse(T); printf("\n后序遍历:\n"); PostOrderTraverse(T); printf("\n树是否为空:"); TreeEmpty(T); printf("\n树的深度为:%d", TreeDepth(T)); printf("\n树的根节点为:%c", Root(T)); }
相关文章推荐
- 数据结构——二叉树的链式实现(C语言)
- 二叉树的链式结构递归遍历实现
- 大话数据结构 code 第6章 02二叉树链式结构实现_BiTreeLink
- 二叉树的链式存储结构 C++代码实现
- 数据结构C语言实现之二叉树链式结构
- 数据结构之C/C++实现二叉树的链式存储
- 二叉树链式结构实现
- 链式结构实现二叉树
- 二叉树链式结构C代码实现
- 二叉树顺序结构实现/链式结构实现
- 【数据结构】二叉树链式结构实现_BiTreeLink
- 大话数据结构 code 第五章 02二叉树链式结构实现_BiTreeLink
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 二叉树的简介及链式结构实现
- 二叉树的链式结构
- 线性结构的顺序存储和链式存储的实现代码(二)
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- 数据结构之用顺序表实现二叉树
- 栈的链式 结构实现
- 大话数据结构 code 第6章 01二叉树顺序结构实现_BiTreeArray