Sicily 1156. Binary tree

For study!

Posted by Winray on March 4, 2016
  • 思路:
    • 如何愉快地前序输出呢,要在存储数据的时候根据位置来存放数据!一开始被自己蠢哭,一直以为第一个输入的就是根结点(例子的祸害呀啊啊啊!!!!),结果证明不是的,所以呢,我们要找出根结点,那么怎么找根结点呢,我用了一个向量来存储下标值,遍历向量值,把节点的左右值作为下标的那个数据设为非根结点,然后剩下的那个就是根节点了。。
  • 具体代码如下:
#include <iostream>
#include <vector>
using namespace std;

struct Store{
    char node;
    int left;
    int right;
    bool is_root;
}store[1001];

void print(int x) {
    if (x == 0) return;
    cout << store[x].node;
    print(store[x].left);
    print(store[x].right);
}
int main() {
    int t;
    while (cin >> t) {
        int index;
        vector<int> store_index;
        for (int i = 0; i < t; i++) {
            cin >> index;
            cin >> store[index].node >> store[index].left
                >> store[index].right;
            store[index].is_root = true;
            store_index.push_back(index);
        }
        for (int i = 0; i < t; i++) {
            int left = store[store_index[i]].left;
            int right = store[store_index[i]].right;
            store[left].is_root = false;
            store[right].is_root = false;
        }
        int root_node;
        for (int i = 0; i < t; i++) {
            if (store[store_index[i]].is_root == true) {
                root_node = store_index[i];
                break;
            }
        }
        print(root_node);
        cout << endl;
    }
    
    return 0;
}