【C++】數據結構之排序二叉樹

要求:

  1. 構造一棵排序二叉樹
  2. 先中後序遍歷
// 二叉排序樹.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
#include<iostream>
#include<time.h>
using namespace std;

//樹節點
typedef struct TNode
{
	int data;
	struct TNode *lchird, *rchird;
}TNode, *Tp;

//初始化數組
void Init(int *arr)
{
	srand(time(0));
	for (int i = 1; i <= 16; i++)
	{
		arr[i] = rand() % (99 - 10 + 1)+10;
	}
}

//初始化二叉樹
void InitTree(Tp &T)
{
	T = new TNode();
	T->lchird = NULL;
	T->rchird = NULL;
}

//創建排序二叉樹
void CreatTree(Tp &T,int *arr,int pos)
{
	if (pos == 1)
	{
		T->data = arr[pos];
	}
	else if (!T)
	{
		T = new TNode;
		T->data = arr[pos];
		T->lchird = NULL;
		T->rchird = NULL;
	}
	else
	{
		if (arr[pos] > T->data)
			CreatTree(T->rchird, arr, pos);
		else 
			CreatTree(T->lchird, arr, pos);
	}
}

//輸出數組
void OutArr(int *arr)
{
	for (int i = 1; i <= 16; i++)
	{
		cout << arr[i] << '\t';
	}
	cout << endl;
}

//前序遍歷
void PreOrderTraver(Tp &T)
{
	if (T)
	{
		cout << T->data << '\t';
		PreOrderTraver(T->lchird);
		PreOrderTraver(T->rchird);
	}
}

//中序遍歷
void InOrderTraver(Tp &T)
{
	if (T)
	{
		InOrderTraver(T->lchird);
		cout << T->data << '\t';
		InOrderTraver(T->rchird);
	}
	
}

//後序遍歷
void PostOrderTraver(Tp &T)
{
	if (T)
	{
		PostOrderTraver(T->lchird);
		PostOrderTraver(T->rchird);
		cout << T->data << '\t';
	}

}

int main()
{
	int arr[17];
	Init(arr);		//初始化數組
	OutArr(arr);	//輸出數組
	TNode *tree;
	InitTree(tree);	//初始化二叉樹
	for(int i=1;i<=16;i++)	//創建排序二叉樹
		CreatTree(tree, arr, i);
	PreOrderTraver(tree);//前序遍歷
	cout << endl;
	InOrderTraver(tree);//中序遍歷
	cout << endl;
	PostOrderTraver(tree);//後序遍歷
	cout << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章