A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:
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. Input Specification:Each input file contains one test case. For each case, the first line contains a positive integer?N?(≤). 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. Output Specification: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. Sample Input:
Sample Output:
? 通過觀察可以注意到,對完全二叉樹當中的任何一個結點(設編號為x),其左孩子的編號一定是2x,而右孩子的編號一定是2x 1。也就是說,完全二叉樹可以通過建立一個大小為2k的數(shù)組來存放所有結點的信息,其中k為完全二叉樹的最大高度,且1號位存放的必須是根結點(想一想為什么根結點不能存在下標為0處?)。這樣就可以用數(shù)組的下標來表圖95完全二又樹編號示意示結點編號,且左孩子和右孩子的編號都可以直接計算得到。 ? 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 int N, nums[1001], res[1001], index = 0; 6 void levelOrder(int k) 7 { 8 if (k > N)//葉子節(jié)點 9 return; 10 levelOrder(k * 2);//遍歷左子樹 11 res[k] = nums[index ];//即遍歷完左子樹后,此時即為根節(jié)點 12 levelOrder(k * 2 1);//遍歷右子樹 13 } 14 int main() 15 { 16 cin >> N; 17 for (int i = 0; i < N; i) 18 cin >> nums[i]; 19 sort(nums, nums N, [](int a, int b) {return a < b; }); 20 levelOrder(1); 21 for (int i = 1; i <= N; i) 22 cout << res[i] << (i == N ? "" : " "); 23 return 0; 24 } ? 來源:https://www./content-4-375901.html |
|