A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
- Both the left and right subtrees must also be binary search trees.
Given the structure of a binary tree and a sequence of distinct integer keys, there is only one way to fill these keys into the tree so that the resulting tree satisfies the definition of a BST. You are supposed to output the level order traversal sequence of that tree. The sample is illustrated by Figure 1 and 2.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=100) which is the total number of nodes in the tree. The next N lines each contains the left and the right children of a node in the format "left_index right_index", provided that the nodes are numbered from 0 to N-1, and 0 is always the root. If one child is missing, then -1 will represent the NULL child pointer. Finally N distinct integer keys are given in the last line.
Output Specification:
For each test case, print in one line the level order traversal sequence of that tree. All the numbers must be separated by a space, with no extra space at the end of the line.
Sample Input:9 1 6 2 3 -1 -1 -1 4 5 -1 -1 -1 7 -1 -1 8 -1 -1 73 45 11 58 82 25 67 38 42
Sample Output:58 25 82 11 38 67 45 73 42
/*2015.8.1cyq*/ #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <fstream> using namespace std; //ifstream fin("case1.txt"); //#define cin fin struct node{ int val; int left; int right; }; //中序遍历填入数据 void inOrder(vector<node> &tree,int root,const vector<int> &a,int &index){ if(root!=-1){ inOrder(tree,tree[root].left,a,index); tree[root].val=a[index++]; inOrder(tree,tree[root].right,a,index); } } int main(){ int N; cin>>N; vector<node> tree(N); for(int i=0;i<N;i++){ cin>>tree[i].left; cin>>tree[i].right; } vector<int> a(N); for(int i=0;i<N;i++) cin>>a[i]; sort(a.begin(),a.end());//对数组排序 int index=0; inOrder(tree,0,a,index);//中根遍历填入数据 vector<int> result; queue<node> cur; cur.push(tree[0]); while(!cur.empty()){//层序遍历,BFS node tmp=cur.front(); cur.pop(); result.push_back(tmp.val); if(tmp.left!=-1) cur.push(tree[tmp.left]); if(tmp.right!=-1) cur.push(tree[tmp.right]); } cout<<result[0]; for(int i=1;i<N;i++) cout<<" "<<result[i]; return 0; }