您的位置:首页 > 理论基础 > 数据结构算法

数据结构复习——二叉树的表示及遍历

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息