solution Of Pat 1099. Build A Binary Search Tree (30)
2016-04-04 01:54
441 查看
1099. Build A Binary Search Tree (30)
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.
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
结题思路 :
题意要求我们将数的序列放入到二叉树中,并进行层次输出。
要求1:保证序列只会有一种在二叉树中的存在方式;
要求2:层次输出树形图即可;
程序步骤:
第一步:对节点的索引进行中序遍历,即此时的对应的数字的排序理应是从小到大的。
第二步:将数字从小到大排序,放入对应的索引的位置。
第三步:层次输出。
具体程序(AC)如下:
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.
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
结题思路 :
题意要求我们将数的序列放入到二叉树中,并进行层次输出。
要求1:保证序列只会有一种在二叉树中的存在方式;
要求2:层次输出树形图即可;
程序步骤:
第一步:对节点的索引进行中序遍历,即此时的对应的数字的排序理应是从小到大的。
第二步:将数字从小到大排序,放入对应的索引的位置。
第三步:层次输出。
具体程序(AC)如下:
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; struct node { int value; int left; int right; }; vector<node> tree; vector<int> list;//暂存索引 vector<int> value;//暂存真实数值 vector<int> result;//保存层次遍历的结果 queue<int> Q;//层次遍历借用的队列 void LDR(int root)//中序遍历 { if(root==-1) return; LDR(tree[root].left); list.push_back(root); LDR(tree[root].right); } void level(int root)//层次遍历 { Q.push(root); int cur; while(!Q.empty()) { cur=Q.front(); result.push_back(tree[cur].value); Q.pop(); if(tree[cur].left!=-1) Q.push(tree[cur].left); if(tree[cur].right!=-1) Q.push(tree[cur].right); } } int ROOT=0; int main() { // your code goes here int n; cin>>n; if(n==0) return 0; node tmp; tree.clear(); list.clear(); value.clear(); result.clear(); while(!Q.empty()) Q.pop(); for(int i=0;i<n;++i) { cin>>tmp.left>>tmp.right; tree.push_back(tmp); } LDR(ROOT); int nodeV; for(int i=0;i<n;++i) { cin>>nodeV; value.push_back(nodeV); } sort(value.begin(),value.end()); int loc; for(int i=0;i<n;++i) { loc=list[i]; tree[loc].value=value[i]; } level(ROOT); cout<<result[0]; for(int i=1;i<result.size();++i) cout<<" "<<result[i]; cout<<endl; return 0; }
相关文章推荐
- IOS开发之UI布局
- [Elixir006]CSV(Comma-separated values)处理
- Textarea - 百度富文本编辑器插件UEditor
- php函数mysql_query批量执行多句sql语句
- Ant_的最完整build.xml解释
- Apue学习:线程
- UITableView优化
- DuiLib(6)——界面管家CPaintManagerUI的函数简介
- UICollectionView基础
- lintcode:Unique Binary Search Trees II
- DuiLib(5)——CWindowWnd窗口函数简介
- [Queue]——面向接口编程
- 【POJ2926】Requirements【二进制】【最大曼哈顿距离】
- String、StringBuffer和StringBuilder
- lintcode: Unique Binary Search Trees
- [html][LigerUI]使用示例
- DELL DOSA 6.X 服务器引导光盘Dell Systems Build and Update Utility ISO下载地址
- IOS9 UIStackView简介
- DuiLib(4)——消息响应
- Android 入门三 UI界面