データ構造:C言語は二叉木の構築と遍歴操作を実現する

2373 ワード

二叉チェーンテーブルのストレージ構造を使用して二叉ツリーを格納します.
typedef struct BinNode{
    int data;
    struct BinNode *lchild;
    struct BinNode *rchild;
}BinNode,*BinTree;
BinTree binTree;

単純な構造体ストレージノードです.
再帰的な思想は二叉木の遍歴構築と検索操作を実現する.
先行パス:
void firstSeek(BinTree node){
	if(node==NULL){
		return;
	}
	printf("%d ",node->data);
	firstSeek(node->lchild);
	firstSeek(node->rchild);
} 

中間パス:
void midSeek(BinTree node){
	if(node==NULL)
		return ;
	midSeek(node->lchild);
	printf("%d ",node->data);
	midSeek(node->rchild);
} 

後の順序:
void lastSeek(BinTree node){
	if(node==NULL)
		return ;
	lastSeek(node->lchild);
	lastSeek(node->rchild);
	printf("%d ",node->data);
} 

コードは簡単で,二叉木の基本構造と再帰思想を理解することが鍵である.
データを入力してコードをテストし、ツリーを構築して葉ノードの左右の子供を入力するときにデータを入力して-1を置くことができます.
#include
#include
#include
#include
#include 
#include
#define ElemType int
using namespace std;

typedef struct BinNode{
	int data;
	struct BinNode *lchild;
	struct BinNode *rchild;
}BinNode,*BinTree;
BinTree binTree;
//    
void createBinTree(BinTree &binTree){
	ElemType info;
	BinNode *r,*l,*s;
	scanf("%d",&info);
	if(info==-1){
		return ;
	}
	if(binTree==NULL){
		binTree =  (BinNode *)malloc(sizeof(BinNode));
		binTree->data=info;
		binTree->lchild=NULL;
		binTree->rchild=NULL;
	}
	createBinTree(binTree->lchild);
	createBinTree(binTree->rchild);
} 
 
//    
void firstSeek(BinTree node){
	if(node==NULL){
		return;
	}
	printf("%d ",node->data);
	firstSeek(node->lchild);
	firstSeek(node->rchild);
} 
//    
void midSeek(BinTree node){
	if(node==NULL)
		return ;
	midSeek(node->lchild);
	printf("%d ",node->data);
	midSeek(node->rchild);
} 
//    
void lastSeek(BinTree node){
	if(node==NULL)
		return ;
	lastSeek(node->lchild);
	lastSeek(node->rchild);
	printf("%d ",node->data);
} 
 
int main(){
	createBinTree(binTree);
	printf("       !
:"); firstSeek(binTree); printf("
:"); midSeek(binTree); printf("
:"); lastSeek(binTree); return 0; }

以上は参考までに、誤り訂正の検討を歓迎します.