一、常用概念
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;
}
}
}