1. 程式人生 > >資料結構(四)之二叉樹

資料結構(四)之二叉樹

  • 二叉樹

二叉樹可以用陣列和鏈式結構這兩種方式來建立,這裡只介紹二叉樹的鏈式結構,並且實現二叉樹的前序、中序和後序遍歷。(運用二叉樹組定義靜態二叉樹的方式以註釋的形式寫明)
二叉樹的建立有三種方式:前序、中序和後序。這裡只展現了前序遍歷的方式。

#include<stdio.h>
#include<stdlib.h>
typedef struct btnode{
	//int data[1000];二叉樹組,從上到下,從左到右依次存在數組裡
	char data;
	//int llink,rlink;靜態二叉樹,分別存放左子樹和右子樹
	struct btnode *lchild;
	struct btnode *rchild; 
}BTnode,*BiTree;//tree[n+1];靜態二叉樹n個結點
void preorder(BiTree T);
void midorder(BiTree T);
void suborder(BiTree T);
void createtree(BiTree &T);
int main(){
	BiTree T;
	/*以下是測試程式碼
	createtree(T);
	preorder(T);
	printf("\n");
	midorder(T);
	printf("\n");
	suborder(T);
	printf("\n");
	*/
	return 0;
}
void preorder(BiTree T){
    if(T!=NULL){
    	printf("%c ",T->data);
    	preorder(T->lchild);
    	preorder(T->rchild);
	}
} 
void midorder(BiTree T){
	if(T!=NULL){
		midorder(T->lchild);
    	printf("%c ",T->data);
    	midorder(T->rchild);
	}
}
void suborder(BiTree T){
	if(T!=NULL){
		suborder(T->lchild);
    	suborder(T->rchild);
    	printf("%c ",T->data);
	}
}
void createtree(BiTree &T){//先序遍歷建立 
	char ch;
	ch=getchar();
	if(ch=='#') T=NULL;
	else{
		T=(struct btnode*)malloc(sizeof(struct btnode));
		T->data=ch;
		createtree(T->lchild);
		createtree(T->rchild);
	}
}