1. 程式人生 > >計算機考研複試真題 二叉排序樹

計算機考研複試真題 二叉排序樹

題目描述

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

輸入描述:

輸入第一行包括一個整數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;

struct TreeNode {  //資料結構定義
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void insert(int v,TreeNode *root){
    
if(v == root->val) return;//題目裡說:輸出的二叉樹遍歷序列中重複元素不用輸出 if(v < root->val){//小於根節點,往左 if(!root->left) root->left = new TreeNode(v);//左子樹為空,以v值構造一個節點掛上去 else insert(v,root->left);//左子樹不為空,繼續插入 }else{//大於根節點,往右 if(!root->right) root
->right = new TreeNode(v);//右子樹為空,以v值構造一個節點掛上去 else insert(v,root->right);//右子樹不為空,繼續插入 } } void preorderTraversal(TreeNode *root){//前序遍歷 if(!root) return; cout << root->val << " "; preorderTraversal(root->left); preorderTraversal(root->right); } void inorderTraversal(TreeNode *root){//中序遍歷 if(!root) return; inorderTraversal(root->left); cout << root->val << " "; inorderTraversal(root->right); } void postorderTraversal(TreeNode *root){//後序遍歷 if(!root) return; postorderTraversal(root->left); postorderTraversal(root->right); cout << root->val << " "; } int main(){ int n; while(cin >> n){ n--; int val; cin >> val; TreeNode root(val); while(n--){ cin >> val; insert(val,&root); } preorderTraversal(&root);cout << endl; inorderTraversal(&root);cout << endl; postorderTraversal(&root);cout << endl; } return 0; }