計算機考研複試真題 二叉排序樹
阿新 • • 發佈:2018-11-07
題目描述
輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。輸入描述:
輸入第一行包括一個整數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; }