要求:
- 構造一棵排序二叉樹
- 先中後序遍歷
// 二叉排序樹.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;
}