严蔚敏 数据结构 二叉树链式存储结构 遍历等操作


课本 《数据结构(C语言版)(第2版)》 严蔚敏版

树结构的学习。

编译环境:DEV C++

文件格式为 cpp(c++文件类型),前者的引用函数,在 C 的情况下没完成。

实现:

二叉树的先序遍历创建,三种遍历方法,叶子节点的查询等。


参考 code: 

#include 
#include 
#define Shyazhut 0//条件启用求叶子节点的函数:0 不使用
const int MYDD = 1103;

typedef struct BiTNode {
	char data;//节点数据域
	struct BiTNode *lc, *rc;//节点左右孩子
} BiTNode, *BiTree;

void CreatBiTree(BiTree &T);
void InitBiTree(BiTree &T);
void PreorderTraversal(BiTree T);//先序遍历
void InOrderTraveres(BiTree T);//中序遍历
void PostTraversing(BiTree T);//后序遍历
int GetLeaves(BiTree T);//求叶子节点
int LeavesSum = 0;//全局变量叶子节点统计

int main() {
	int i,n;
	BiTree T;
	InitBiTree(T);
	CreatBiTree(T);

	puts("\n先序遍历二叉树的结果:");
	PreorderTraversal(T);

	puts("\n\n中序遍历二叉树的结果:");
	InOrderTraveres(T);

	puts("\n\n后序遍历二叉树的结果:");
	PostTraversing(T);

	printf("\n\n叶子节点的个数有 %d 个(先序遍历中求得).\n", LeavesSum);
	
#if Shyazhut
	printf("叶子节点的个数有 %d 个(求叶子节点函数求得).\n", GetLeaves(T));
#endif

	free(T);
	return 0;
}

void InitBiTree(BiTree &T) {//节点初始化
	T = (BiTNode*)malloc(sizeof(BiTNode));//malloc()的返回值可以强制类型转换
	T -> lc = NULL;
	T -> rc = NULL;
	printf("请以先序的方式键入二叉树节点信息。\n");
}

void CreatBiTree(BiTree &T) {//先序遍历的方式构造二叉树
	char ch;
	scanf("%c", &ch);
	if(ch == '#')
		T = NULL;
	else {
		T=(BiTNode*)malloc(sizeof(BiTNode));
		if(!T) return;
		T -> data = ch;
		CreatBiTree(T->lc);
		CreatBiTree(T->rc);
	}
}

/*三种遍历*/
void PreorderTraversal(BiTree T) {
	if(T==NULL)	return;
	printf("%c ", T -> data);
	if((T -> lc == NULL) && (T -> rc == NULL)) LeavesSum++;//叶子节点的统计

	PreorderTraversal(T->lc);
	PreorderTraversal(T->rc);
}

void InOrderTraveres(BiTree T) {
	if(T == NULL)	return;
	InOrderTraveres(T -> lc);
	printf("%c ", T -> data);
	InOrderTraveres(T -> rc);
}

void PostTraversing(BiTree T) {
	if(T == NULL)	return;
	PostTraversing(T -> lc);
	PostTraversing(T -> rc);
	printf("%c ", T -> data);
}

#if Shyazhut
int GetLeaves(BiTree T) {//叶子节点的统计
	if(!T) {
		LeavesSum += GetLeaves(T -> lc);
		if((T -> lc == NULL) && (T -> rc == NULL)) LeavesSum++;
		LeavesSum += GetLeaves(T -> rc);
	}
	return LeavesSum;
}
#endif

/*
测试数据
ABC##DE#G##F###


*/


你可能感兴趣的:(学习过程的交流)