完全二叉树
刚开始只发现了中序遍历是从小到大顺序的。一直在找完全二叉树的层结点间规律。。。放弃了
不曾想,完全二叉树的规律早就知道啊。根结点为i,其左孩子结点2*i, 右孩子结点2*i+1。
结合此两者即可解决问题!
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.
Input Specification:
Each input file contains one test case. For each case, the first line contains a positive integer N(≤1000). Then NN 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:
10 1 2 3 4 5 6 7 8 9 0
Sample Output:
6 3 8 1 5 7 9 0 2 4
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 6 #define MaxSize 1005 7 int sortNum[MaxSize] = {0}; 8 int CBTreeNode[MaxSize] = {0}; 9 int countNum = 0; 10 void CreatCBTree(int root,int N) 11 { 12 if(root > N) 13 return; 14 int left = root * 2; 15 int right = root * 2 + 1; 16 CreatCBTree(left,N); //中序遍历LGR从小到大 小的先 17 CBTreeNode[root] = sortNum[countNum++]; 18 CreatCBTree(right,N); 19 } 20 21 int main() 22 { 23 int N; 24 scanf("%d",&N); 25 for(int i = 0; i < N; i++) 26 scanf("%d",&sortNum[i]); 27 28 sort(sortNum,sortNum + N);//按从小到大排序 29 CreatCBTree(1,N); 30 for(int i = 1; i <= N; i++) { 31 if(i != N) 32 printf("%d ",CBTreeNode[i]); 33 else 34 printf("%d",CBTreeNode[i]); 35 } 36 return 0; 37 }