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

本文介绍了二叉树的基本概念,包括结点的度、树的度、满二叉树与完全二叉树等,并详细阐述了二叉树的三种遍历方式:前序、中序和后序遍历,提供了递归与非递归实现方法。

一、常用概念

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值