數據結構 | 二叉樹的創建和三種遍歷方式


二叉樹的創建和三種遍歷方式

幫同學寫作業順帶復習了一下

直接丟代碼了:

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


// 二叉樹節點結構體&指針類型
typedef struct BiTNode 
{
	char data;    // 數據域
	struct BiTNode* lchild;  // 左孩子
	struct BiTNode* rchild; // 右孩子
}BiTNode, *BiTree;


void CreateBiTree(BiTree &T){
	// 前序遍歷創建二叉樹
	char data;
	scanf("%c", &data);
	if (data != '#'){           // 遇到#表示當前樹結束
		T = new BiTNode;          // 生成根節點
		T->data = data;             // 給數據域賦值
		CreateBiTree(T->lchild);         // 遞歸創建左子樹
		CreateBiTree(T->rchild);          // 遞歸創建右子樹

	}else{
		T = NULL;       // 空樹
	}
}


// 前序遍歷
void PreOrderTraverse(BiTree T){
	if(T){
		printf("%c ", T->data);             // 訪問根節點
		PreOrderTraverse(T->lchild);      // 遞歸前序遍歷左子樹
		PreOrderTraverse(T->rchild);      // 遞歸前序遍歷右子樹
	}
}

// 中序遍歷
void InOrderTraverse(BiTree T){
	if(T){
		InOrderTraverse(T->lchild);      // 遞歸中序遍歷左子樹
		printf("%c ", T->data);             // 訪問根節點
		InOrderTraverse(T->rchild);      // 遞歸中序遍歷右子樹
	}
}

// 后序遍歷
void PostOrderTraverse(BiTree T){
	if(T){
		PostOrderTraverse(T->lchild);      // 遞歸后序遍歷左子樹
		PostOrderTraverse(T->rchild);      // 遞歸后序遍歷右子樹
		printf("%c ", T->data);             // 訪問根節點
	}
}



int main(){
	BiTree bt = NULL;
	CreateBiTree(bt);

	printf("\n前序遍歷:");
	PreOrderTraverse(bt);

	printf("\n中序遍歷:");
	InOrderTraverse(bt);

	printf("\n后序遍歷:");
	PostOrderTraverse(bt);



	return 0;
}

over.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM