1022 Complete Binary Search Tree
2016-10-01 21:38
267 查看
利用了完全二叉树的性质:满二叉树表现在可用下标寻左右子节点。根节点为0时,节点i的左右子节点为(2*i+1)和(2*i+2);同理:反过来按这个性质构造出来的树就是一个完全二叉树
以及性质:二叉搜索树表现在中序遍历是有序的
所以思路是:重新构造一个数组,index就按照层序遍历的标号来,但是原始拍好序的数组是按照中序遍历来的,那就按照中序遍历吧数据填充进去就好了。填的方式就按照递归来就是了
题目描述
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.
A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.
Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.
输入描述:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.
输出描述:
For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
输入例子:
10
1 2 3 4 5 6 7 8 9 0
输出例子:
6 3 8 1 5 7 9 0 2 4
另外附上C++:
有一篇文章讲的不错:
浙大PAT 1064. Complete Binary Search Tree
以及性质:二叉搜索树表现在中序遍历是有序的
所以思路是:重新构造一个数组,index就按照层序遍历的标号来,但是原始拍好序的数组是按照中序遍历来的,那就按照中序遍历吧数据填充进去就好了。填的方式就按照递归来就是了
题目描述
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.
A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.
Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.
输入描述:
Each input file contains one test case. For each case, the first line contains a positive integer N (<=1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000.
输出描述:
For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
输入例子:
10
1 2 3 4 5 6 7 8 9 0
输出例子:
6 3 8 1 5 7 9 0 2 4
package p1064; import java.util.Arrays; import java.util.Scanner; public class Main { static int[] built_cbs; static int[] nums; static int pos = 0, n = 0; public static void main(String[] args) { Scanner sc = new Scanner(System.in); n = sc.nextInt(); nums = new int ; for(int i=0 ;i<n; i++) nums[i] = sc.nextInt(); Arrays.sort(nums); built_cbs = new int ; LDR_build(0); for(int i=0; i<n-1; i++) System.out.print(built_cbs[i] + " "); System.out.println(built_cbs[n-1]); } public static void LDR_build(int i) { if(i >= n) return; LDR_build(2 * i + 1); built_cbs[i] = nums[pos++]; LDR_build(2 * i + 2); } }
另外附上C++:
#include <iostream> #include <algorithm> using namespace std; int N; int nums[1002], cbs[1002]; int pos = 0; void built_cbs(int f) { if(f >= N) return; built_cbs(2 * f + 1); cbs[f] = nums[pos++]; built_cbs(2 * f + 2); } int main() { cin >> N; for(int i=0; i<N; i++) { cin >> nums[i]; } sort(nums, nums + N); built_cbs(0); for(int i=0; i<N-1; i++) cout << cbs[i] << " "; cout << cbs[N-1]; return 0; }
有一篇文章讲的不错:
浙大PAT 1064. Complete Binary Search Tree
相关文章推荐
- PAT 1022 Complete Binary Search Tree (30)
- PAT A1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)-PAT
- PAT A 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree (30)
- PAT(A) - 1064. Complete Binary Search Tree (30)
- PAT (Advanced Level) 1064. Complete Binary Search Tree (30) 递归建立CBST
- PAT 1064. Complete Binary Search Tree (30) 快速建立完全二叉树
- 1064. Complete Binary Search Tree
- PAT 1064. Complete Binary Search Tree (二叉树遍历)
- 1064. Complete Binary Search Tree (30)
- pat 1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree
- Programming Ability Test学习 1064. Complete Binary Search Tree (30)
- A1064. Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree
- PAT_1064. Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 1064. Complete Binary Search Tree (30)
- pat 甲级 1064. Complete Binary Search Tree (30)