数据结构复习——二叉树的表示及遍历
2016-05-31 21:28
411 查看
一、常用概念
1.一棵有N个结点的树有N-1条边
2.结点的度:结点的子树个数
3.树的度:树的所有结点中最大的度数
4.一棵树采用 firstChild-nextSibling 表示方法可以转换为二叉树
5.二叉树的子树有左右之分,二叉树有5中基本形式
6.满二叉树:深度为k,共有2^k-1个结点
7.完全二叉树:按序号对应
二、二叉树遍历
typedef struct treeNode * PTree;
struct treeNode{ //树的结点定义
int Data;
PTree Left;
PTree Right;
};
/*
*二叉树的遍历
*/
/* --------------------递归遍历-----------------------------*/
//递归前序遍历
void preTravel(PTree tree){
if(tree){
printf("%d ", tree->Data);
preTravel(tree->Left);
preTravel(tree->Right);
}
}
//递归中序遍历
void inTravel(PTree tree){
if(tree){
inTravel(tree->Left);
printf("%d ", tree->Data);
inTravel(tree->Right);
}
}
//递归后序遍历
void afterTravel(PTree tree){
if(tree){
afterTravel(tree->Left);
afterTravel(tree->Right);
printf("%d ", tree->Data);
}
}
/* --------------------非递归遍历-----------------------------*/
//非递归中序遍历
void inTravel2(PTree tree){
PStack s = initStack(); //初始化一个空栈
PTree t;
while(t || !isEmpty(s)){
while(t){
push(s, t);
t = t->Left;
}
if(!isEmpty(s)){
t = pop(s);
printf("%d ", t->Data);
t = t->Right;
}
}
}
//非递归先序遍历
//非递归中序遍历
void preTravel2(PTree tree){
PStack s = initStack(); //初始化一个空栈
PTree t;
while(t || !isEmpty(s)){
while(t){
printf("%d ", t->Data);
push(s, t);
t = t->Left;
}
if(!isEmpty(s)){
t = pop(s);
t = t->Right;
}
}
}
1.一棵有N个结点的树有N-1条边
2.结点的度:结点的子树个数
3.树的度:树的所有结点中最大的度数
4.一棵树采用 firstChild-nextSibling 表示方法可以转换为二叉树
5.二叉树的子树有左右之分,二叉树有5中基本形式
6.满二叉树:深度为k,共有2^k-1个结点
7.完全二叉树:按序号对应
二、二叉树遍历
typedef struct treeNode * PTree;
struct treeNode{ //树的结点定义
int Data;
PTree Left;
PTree Right;
};
/*
*二叉树的遍历
*/
/* --------------------递归遍历-----------------------------*/
//递归前序遍历
void preTravel(PTree tree){
if(tree){
printf("%d ", tree->Data);
preTravel(tree->Left);
preTravel(tree->Right);
}
}
//递归中序遍历
void inTravel(PTree tree){
if(tree){
inTravel(tree->Left);
printf("%d ", tree->Data);
inTravel(tree->Right);
}
}
//递归后序遍历
void afterTravel(PTree tree){
if(tree){
afterTravel(tree->Left);
afterTravel(tree->Right);
printf("%d ", tree->Data);
}
}
/* --------------------非递归遍历-----------------------------*/
//非递归中序遍历
void inTravel2(PTree tree){
PStack s = initStack(); //初始化一个空栈
PTree t;
while(t || !isEmpty(s)){
while(t){
push(s, t);
t = t->Left;
}
if(!isEmpty(s)){
t = pop(s);
printf("%d ", t->Data);
t = t->Right;
}
}
}
//非递归先序遍历
//非递归中序遍历
void preTravel2(PTree tree){
PStack s = initStack(); //初始化一个空栈
PTree t;
while(t || !isEmpty(s)){
while(t){
printf("%d ", t->Data);
push(s, t);
t = t->Left;
}
if(!isEmpty(s)){
t = pop(s);
t = t->Right;
}
}
}
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)