PAT-A1099. 二叉树-中序建树 层序输出
2017-03-20 20:02
375 查看
题目链接:https://www.patest.cn/contests/pat-a-practise/1099
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:
Sample Output:
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
#include <iostream> #include <algorithm> #include <queue> using namespace std; struct BTreeNode { int data; int lchild, rchild; }; BTreeNode T[110]; int val[110], ind; void CreateByInOrder(int); void LevelOrder(int, int); int main(int argc, const char * argv[]) { int num; cin >> num; for(int i = 0; i < num; ++i){ cin >> T[i].lchild >> T[i].rchild; } for(int i = 0; i < num; ++i){ cin >> val[i]; } sort(val, val+num); ind = 0; CreateByInOrder(0); ind = 0; LevelOrder(0, num); return 0; } void CreateByInOrder(int root) { if(root == -1) return; else{ CreateByInOrder(T[root].lchild); T[root].data = val[ind++]; CreateByInOrder(T[root].rchild); } } void LevelOrder(int root, int N) { queue<int> qt; qt.push(root); while (!qt.empty()) { int num = qt.front(); qt.pop(); cout << T[num].data; ind++; if(ind < N) cout << " "; else cout << endl; if(T[num].lchild != -1) qt.push(T[num].lchild); if(T[num].rchild != -1) qt.push(T[num].rchild); } }
相关文章推荐
- PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由
- PAT-A1102. 二叉树-翻转 层序、中序输出
- 动态二叉树后序和中序建树并层序遍历
- 根据后序与中序遍历建树层序遍历输出
- PAT-A1127. 二叉树-中序后序建树,Z字遍历
- pat 甲1127. ZigZagging on a Tree (已知后序及中序建树,并层次往返输出)
- 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。
- PAT 1020(由二叉树的中序和后序,求层序遍历) 1086(由二叉树的中序和先序求后序遍历)
- 已知先序和中序构建二叉树并且以层序输出
- 二叉树——已知二叉树先序,建树,并输出中序、后序,并求树叶数和深度
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- 利用二叉树层序遍历输出每层数据
- 二叉树的前序、中序、后序和层序遍历
- 先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 根据前序和中序遍历输出二叉树
- 从层序中序重建二叉树输出先序后序
- 给定先序和后续,构造出一颗二叉树并输出中序序列
- 数据结构六:二叉树的先序建树与中序的非递归遍历算法
- 二叉树的前序、中序、后序、层序非递归遍历