1022 Complete Binary Search Tree
来源:互联网 发布:kali linux不能上网 编辑:程序博客网 时间:2024/06/05 17:00
利用了完全二叉树的性质:满二叉树表现在可用下标寻左右子节点。根节点为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
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[n]; for(int i=0 ;i<n; i++) nums[i] = sc.nextInt(); Arrays.sort(nums); built_cbs = new int[n]; 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
- 1022 Complete Binary Search Tree
- Complete Binary Search Tree
- Complete Binary Search Tree
- PAT 1022Complete Binary Search Tree (30)
- 1064. Complete Binary Search Tree
- PAT_1064: Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- 1064.Complete Binary Search Tree
- pat1064 Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- Binary Search Tree Complete Implementation
- 1064 Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- 1064. Complete Binary Search Tree
- Complete Binary Search Tree(mooc)
- 1064. Complete Binary Search Tree
- React-Native学习笔记之代码智能提醒(webstorm)
- 微信网页开发样式库
- Linux环境下的工程管理器—make(二)
- c++知识复习3.0
- 自己动手理解NRV优化
- 1022 Complete Binary Search Tree
- android触碰消息传递机制
- js中sort()排序的原理
- 操作系统的四个特性
- C 分解质因数与完数
- OpenGL学习笔记(freeglut)
- javaweb里面的lib下面的包删不掉
- ZYNQ-Miz702 VIVADO 开发环境建立(第一章 )
- SearchView(简单的java写Menu)