PAT 1099-Build A Binary Search Tree (30)
2017-03-01 12:47
453 查看
题目描述
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.
输入描述:
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.
输出描述:
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.
输入例子:
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
输出例子:
58 25 82 11 38 67 45 73 42
解题思路
一道基本的二叉搜索树问题,先中序遍历将二叉树构建完成,然后层次遍历输出。#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
struct TreeNode
{
int key;
int Left;
int Right;
};
vector<int> keys;
struct TreeNode nodes[100];
void BuildTree(TreeNode node, int index);
void PrintTree(TreeNode node);
int main()
{
int N;
cin >> N;
keys.resize(N);
for (int i = 0; i < N; i++)
cin >> nodes[i].Left >> nodes[i].Right;
for (int i = 0; i < N; i++)
cin >> keys[i];
sort(keys.begin(), keys.begin() + N);
BuildTree(nodes[0],0);
PrintTree(nodes[0]);
}
void BuildTree(TreeNode node, int index)
{
if (node.Left != -1)
BuildTree(nodes[node.Left],node.Left);
nodes[index].key = keys.front();
keys.erase(keys.begin());
if (node.Right != -1)
BuildTree(nodes[node.Right],node.Right);
}
void PrintTree(TreeNode node)
{
queue<TreeNode> Q;
TreeNode temp;
Q.push(node);
while (!Q.empty())
{
temp = Q.front();
Q.pop();
if (temp.Left != -1)
Q.push(nodes[temp.Left]);
if (temp.Right != -1)
Q.push(nodes[temp.Right]);
if (Q.empty())
cout << temp.key;
else
cout << temp.key << " ";
}
}
相关文章推荐
- PAT (Advanced Level) Practise 1099 Build A Binary Search Tree (30)
- PAT (Advanced Level) Practise 1099 Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- PAT研究生入学考试2015.03第四题Build A Binary Search Tree (30) 题解
- PAT1099:Build A Binary Search Tree
- pat 1099 Build A Binary Search Tree
- 浙大pat | 浙大pat 牛客网甲级 1010 Build A Binary Search Tree (30) 二叉搜索树
- Pat(Advanced Level)Practice--1099(Build A Binary Search Tree )
- PAT 1099 Build A Binary Search Tree
- 1099. Build A Binary Search Tree (30)
- PAT1099 Build A Binary Search Tree
- PAT-1099(Build A Binary Search Tree)
- 1099 Build A Binary Search Tree
- pat 1064. Complete Binary Search Tree (30)
- 1099. Build A Binary Search Tree
- Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree
- PAT 1064. Complete Binary Search Tree (30)
- PAT 1064. Complete Binary Search Tree (30)(中序遍历来给完全搜索树赋值,题目是给出一个列数字,把它构建成完全搜索树并输出)