數據結構-二叉樹(c語言)

一下代碼是二叉樹的相關代碼、包括二叉樹的根據前序遍歷創建二叉樹。根據前序遍歷、中序遍歷與後續遍歷依次查找二叉樹的各個節點。

#include<stdio.h>

//定義二叉樹節點數據類型
typedef struct bitnode          
{
	int data;						//存儲數據結點
	struct bitnode *left, *right;   //存儲該結點的左右子樹指針
} bitnode, *bitree;                 //bitree爲指向bitnode這種結構的指針 

//前序構造二叉樹函數
bitnode* PerCreateTree(  )    
{
	bitnode* T; 
	int item;
	scanf("%d",&item);
	if( item == 0)								//葉節點數據標誌:其後根兩個0 
	    T = NULL;                               //若某一節點爲葉子結點,則其左右子樹均爲NULL,0表示建空樹
	else
	{
		T = (bitnode*)malloc(sizeof(bitnode));
		T->data = item;
		T->left = PerCreateTree();              //遞歸創建其左子樹 
		T->right = PerCreateTree();             //遞歸創建其右子樹 
	}	
	return T;                                   //返回根節點 
}

//前序序遍歷二叉樹函數
void PerOrder(bitnode* T)
{
	if( T )							  // T != NULL 
	{
		printf("%d  ",T->data);		  // 訪問根節點的數據域
		PerOrder(T->left);            // 遞歸先序遍歷其左子樹 
		PerOrder(T->right);           // 遞歸先序遍歷其右子樹 
	}
} 

//後序遍歷二叉樹函數
void hou(bitree T)
{
	if( T )							  // T != NULL 
	{	
		hou(T->left);				  //遞歸先序遍歷其左子樹 
		hou(T->right);				  //遞歸先序遍歷其右子樹 
		printf("%d  ",T->data);		  // 訪問根節點的數據域
	}
} 

//中序遍歷二叉樹函數
void zhong(bitree T)
{
	if( T )							  // T != NULL 
	{	
	  
		hou(T->left);				  //遞歸先序遍歷其左子樹 
		printf("%d  ",T->data);		  // 訪問根節點的數據域
		hou(T->right);				  //遞歸先序遍歷其右子樹 
		
	}
}

void InOrder(bitnode *root){
	if(root==NULL) return;
	else{
		InOrder(root->left);
		printf("%d",root->data);
		InOrder(root->right);
	}
} 

//設計算法求二叉樹的節點個數
int count =0;
int Count(bitnode *root){
	if(root==NULL)return 0;
	else{
		Count(root->left);
		count++;
		Count(root->right);
	}return count;
} 

//按前序次序打印二叉樹中的葉子節點 
void PreOrder(bitnode *root){
	if(root==NULL) return;
	else{
		if(!root->left&&!root->right)
			printf("%d ",root->data);
			PreOrder(root->left);
			PreOrder(root->right);
	}
}


int main()
{
	bitnode* root;
	printf("請輸入數據前序創建一棵二叉樹:\n");
	root = PerCreateTree();				//先序創建一棵二叉樹 	
	printf("前序遍歷的結果:"); 
	PerOrder(root);						//先序遍歷 
    printf("\n");
	printf("後序遍歷的結果:");
	hou(root);							//後序遍歷 
    printf("\n"); 
    printf("中序遍歷的結果:");
	zhong(root);						//後序遍歷 
    printf("\n");
    Count(root); 
    printf("二叉樹的節點個數:%d",count);
    printf("\n");
    printf("二叉樹中的葉子節點:");
    PreOrder(root);
	printf("\n");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章