1. 程式人生 > 其它 >C++:二叉排序樹

C++:二叉排序樹

技術標籤:C++c++二叉樹資料結構

題目描述

輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。

輸入描述:

輸入第一行包括一個整數n(1<=n<=100)。
接下來的一行包括n個整數。

輸出描述:

可能有多組測試資料,對於每組資料,將題目所給資料建立一個二叉排序樹,並對二叉排序樹進行前序、中序和後序遍歷。
每種遍歷結果輸出一行。每行最後一個數據之後有一個空格。

輸入中可能有重複元素,但是輸出的二叉樹遍歷序列中重複元素不用輸出。

示例1

輸入

5
1 6 5 9 8

輸出

1 6 5 9 8
1 5 6 8 9
5 8 9 6 1

解答程式碼

#include<iostream>
using namespace std; typedef struct Node{ int data; Node *left=NULL; Node *right=NULL; Node(int num):data(num){} }Node; void insert(Node* &T,int num){ if (!T) T =new Node(num); else if (num < T->data) insert(T->left,num); else if (num > T->data) insert
(T->right,num); return; } void preOrder(Node *T){ if(!T) return; cout<<T->data<<" "; preOrder(T->left); preOrder(T->right); } void midOrder(Node* T){ if(!T) return; midOrder(T->left); cout<<T->data<<" "; midOrder
(T->right); } void postOrder(Node* T){ if(!T) return; postOrder(T->left); postOrder(T->right); cout<<T->data<<" "; } int main(){ int N,temp; Node *T; while(cin>>N){ T = NULL; for(int i=0;i<N;i++){ cin>>temp; insert(T, temp); } preOrder(T); cout<<endl; midOrder(T); cout<<endl; postOrder(T); cout<<endl; } }