1. 程式人生 > >C語言中樹的建立和遍歷

C語言中樹的建立和遍歷

樹的遍歷分為三種:前序遍歷(根左右),中序遍歷(左根右),後序遍歷(左右根)。

PS:根左右,就是先遍歷根節點,然後是左子樹,最後是右子樹。如下圖:


前序遍歷:ABDECF。

中序遍歷:DBEACF。

後序遍歷:DEBFCA。

PPS:有一種更便捷的方法來寫出三種遍歷的結果:從根節點開始,從左面畫線,將樹沿著邊界圈起來。按照線在節點的不同位置依次寫出資料。其中:前序遍歷為線在節點左側;中序遍歷為線在節點下方;後序遍歷為線在節點右側。如下圖:

這裡我們用前序遍歷的方法來建立樹。使其輸出三種遍歷的結果:

#include <stdio.h>
#include <stdlib.h>

struct node{//建立節點
	char data;
	struct node* left;
	struct node* right;
};
//前序遍歷
void pre_order(struct node* root)
{
	if(root == NULL)
		return ;
	else {
		printf("%c\t", root->data);
		pre_order(root->left);
		pre_order(root->right);
	}
}
//中序遍歷
void min_order(struct node* root)
{
	if(root == NULL)
		return ;
	else {
		min_order(root->left);
		printf("%c\t", root->data);
		min_order(root->right);
	}
}
//後序遍歷
void postorder(struct node* root)
{
	if(root == NULL)
		return ;
	else {
		postorder(root->left);
		postorder(root->right);
		printf("%c\t", root->data);
	}
}
//前序遍歷建立樹
struct node* create(struct node* root)
{
	char ch = getchar();	//沒有子樹的用#表示
	if(ch == '#')
		return NULL;
	else {
		root = malloc(sizeof(struct node));
		root->data = ch;
		root->left = create(root->left);
		root->right = create(root->right);
		return root;
	}
}

int main()
{
	struct node* root = NULL;

	root = create(root);

	pre_order(root);
	printf("\n");
	min_order(root);
	printf("\n");
	postorder(root);
	printf("\n");

	return 0;
}
輸入與結果為: