建立二叉排序樹_三種順序遍歷
阿新 • • 發佈:2019-01-14
str 空格 -- 一行 amp oot std new clu
題目描述
輸入一系列整數,建立二叉排序樹,並進行前序,中序,後序遍歷。
輸入描述:
輸入第一行包括一個整數n(1<=n<=100)。
接下來的一行包括n個整數。
輸出描述:
可能有多組測試數據,對於每組數據,將題目所給數據建立一個二叉排序樹,並對二叉排序樹進行前序、中序和後序遍歷。
每種遍歷結果輸出一行。每行最後一個數據之後有一個空格。
輸入中可能有重復元素,但是輸出的二叉樹遍歷序列中重復元素不用輸出。
分析
編寫insert函數
#include <iostream> using namespace std; struct tree_node{ int data; tree_node *left; tree_node *right; tree_node(int x):data(x), left(NULL), right(NULL){} //初始化一個結點 }; void insert(int x, tree_node *root){ if(x == root -> data) return; if(x < root -> data){ if(!root -> left)//如果左邊為空 root -> left = new tree_node(x);//則以x建立一個結點,並且插入左邊 else insert(x, root -> left);否則,左邊不空,遞歸插入左子樹 }else{ if(!root -> right)// 右子樹為空 root -> right = new tree_node(x);// 直接插入右邊 else insert(x, root -> right);// 否則遞歸插入右子樹 } } void pre_order(tree_node *root){ if(!root) return; // 樹為空 直接返回 cout << root -> data << " ";//先序遍歷,先輸出根節點 pre_order(root -> left); //遞歸遍歷左子樹 pre_order(root -> right);// 遞歸遍歷右子樹 } void in_order(tree_node *root){ if(!root) return; in_order(root -> left); cout << root -> data << " "; in_order(root -> right); } void post_order(tree_node *root){ if(!root) return; post_order(root -> left); post_order(root -> right); cout << root -> data << " "; } int main(){ int n; while(cin >> n){ int x; cin >> x; tree_node root(x); --n; while(n--){ cin >> x; insert(x, &root); } pre_order(&root); cout << endl; in_order(&root); cout << endl; post_order(&root);cout << endl; } return 0; }
建立二叉排序樹_三種順序遍歷