关闭

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

标签: 二叉树遍历数据结构
147人阅读 评论(0) 收藏 举报
分类:

一、常用概念

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;
		}
	}
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9018次
    • 积分:276
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:5篇
    • 译文:0篇
    • 评论:1条