二叉树的层次遍历(Trees on level,Duke 1993,Uva 122)
题目描述

输入格式

输出格式

【输入样例】
(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) ()
【输出样例】
5 4 8 11 13 4 7 2 1 not complete
#include <iostream> #include <queue> #include <vector> #include <cstring> #define maxn 10000 using namespace std; bool falsed; char s[maxn]; struct Node { bool have_value; int v; Node *left, *right; Node() : have_value(false), left(NULL), right(NULL){}; }; Node *root; void addnode(int, char *); Node *newnode() { return new Node(); } bool read_input() { falsed = false; root = newnode(); for (;;) { if (scanf("%s", s) != 1) { return false; } if (!strcmp(s, "()")) { break; } int v; sscanf(&s[1], "%d", &v); addnode(v, strchr(s, ',') + 1); } return true; } void addnode(int v, char *s) { int n = strlen(s); Node *u = root; for (int i = 0; i < n; i++) { if (s[i] == 'L') { if (u->left == NULL) { u->left = newnode(); } u = u->left; } if (s[i] == 'R') { if (u->right == NULL) { u->right = newnode(); } u = u->right; } } if (u->have_value) { falsed = true; } u->v = v; u->have_value = true; } bool bfs(vector<int> &ans) { queue<Node *> q; ans.clear(); q.push(root); while (!q.empty()) { Node *u = q.front(); q.pop(); if (!u->have_value) { return false; } ans.push_back(u->v); if (u->left != NULL) { q.push(u->left); } if (u->right != NULL) { q.push(u->right); } } return true; } void remove_tree(Node *u) { if (u == NULL) { return; } remove_tree(u->left); remove_tree(u->right); delete u; } int main() { read_input(); vector<int> ans; if (bfs(ans) == true) { for (vector<int>::iterator i = ans.begin(); i != ans.end(); ++i) { cout << *i << " "; } cout << endl; } else { cout << "not complete" << endl; } system("pause"); return 0; }
转载请注明出处:https://www.cnblogs.com/stu-jyj3621

浙公网安备 33010602011771号