标签:ike ring cst rsa struct ebs 反转 htc mes
Input
Output
Sample Input
BDHPY CM GQ K * AC B $
Sample Output
KGCBDHQMPY BAC
解题思路:
本题给出多组字符串每组以*为结尾以$为结束条件要求输出每一组数据所建立的二叉搜索树的先序遍历
如例中输入:
BDHPY
CM 插入顺序为 -> K -> K -> K
GQ G Q G Q G Q
K C M C H M Y
* B D P
其先序遍历为:KGCBDHQMPY。
1 #include <cstdio> 2 #include <cstring> 3 #include <vector> 4 #include <iterator> 5 #include <iostream> 6 #include <algorithm> 7 // bits/stdc++.h会编译错误 8 using namespace std; 9 typedef char typeData; 10 struct node{ 11 typeData data; 12 node *leftChild; 13 node *rightChild; 14 node(){ 15 leftChild = NULL; 16 rightChild = NULL; 17 } 18 }; 19 vector<typeData> data; 20 string temp, str; 21 void insertBST(node *&root, typeData x){ //二叉搜索树插入函数 22 //注意函数要进行插入操作,根结点要传引用 23 if(root == NULL){ //找到空位置即使插入位置 24 root = new node(); //新建结点权值为x 25 root->data = x; 26 return; 27 } 28 if(x == root->data){ //要插入结点已存在直接返回 29 return; 30 }else if(root->data > x){ //x比根结点数据域小 需要插在左子树 31 insertBST(root->leftChild, x); //往左子树搜索 32 }else if(root->data < x){ //x比根结点数据域大 需要插在右子树 33 insertBST(root->rightChild, x); //往右子树搜索 34 } 35 } 36 node *createBST(){ //建树 37 node *root = NULL; 38 for(string::iterator it = str.begin(); it != str.end(); it++){ 39 insertBST(root, *it); //以str为数据组建树 40 } 41 return root; //返回根结点 42 } 43 void preorder(node *root){ 44 if(root == NULL)//到达空树为递归边界 45 return; 46 printf("%c", root->data); //访问根结点输出权值 47 preorder(root->leftChild); //访问左子树 48 preorder(root->rightChild); //访问右子树 49 } 50 int main() 51 { 52 while(cin >> temp){ //输入字符串 53 if(temp != "*" && temp != "$"){ 54 //如果输入的字符串不是组结束符或结尾符 55 str += temp; //将出入的字符串加到str字符串尾部 56 continue; 57 } 58 //如果输入的时组结束符或结尾符 59 reverse(str.begin(),str.end()); //将str数组反转 60 node *root = createBST(); //建树 61 str = ""; //将str清空 62 preorder(root); //输出前序遍历 63 printf("\n"); 64 if(temp == "$")//如果是结尾符跳出循环 65 break; 66 } 67 return 0; 68 }
标签:ike ring cst rsa struct ebs 反转 htc mes
原文地址:https://www.cnblogs.com/suvvm/p/9873951.html