The order of a Tree (二叉搜尋樹+先序遍歷)
As we know,the shape of a binary search tree is greatly related to the order of keys we insert. To be precisely:
1. insert a key k to a empty tree, then the tree become a tree with
only one node;
2. insert a key k to a nonempty tree, if k is less than the root ,insert
it to the left sub-tree;else insert k to the right sub-tree.
We call the order of keys we insert “the order of a tree”,your task is,given a oder of a tree, find the order of a tree with the least lexicographic order that generate the same tree.Two trees are the same if and only if they have the same shape.
Input
There are multiple test cases in an input file. The first line of each testcase is an integer n(n <= 100,000),represent the number of nodes.The second line has n intergers,k1 to kn,represent the order of a tree.To make if more simple, k1 to kn is a sequence of 1 to n.
Output
One line with n intergers, which are the order of a tree that generate the same tree with the least lexicographic.
Sample Input
4 1 3 4 2
Sample Output
1 3 2 4
題意:題意給出一個序列,構造一棵二叉搜尋樹,讓你找一個序列,滿足:能構成與給出的序列相同的二叉搜尋樹,同時,字典序最小。
分析:首先構造二叉搜尋樹,然後先序遍歷輸出即可。
AC程式碼:
#include <stdio.h>
typedef struct binTreeNode{
int data;
struct binTreeNode *lchild,*rchild;
} *BT;
void add( BT &T , int val ){//構造一個線索二叉樹
if( T==NULL ){
T = new binTreeNode();
T->data = val;
T->lchild = T->rchild = NULL;
} else if( T->data > val ){
add( T->lchild,val );
} else{
add( T->rchild,val );
}
}
void preOrder( BT T , bool flag ){//先序輸出
if( T==NULL )
return;
else {
if( !flag )
printf( " " );
printf( "%d",T->data );
preOrder( T->lchild , 0);
preOrder( T->rchild , 0);
}
}
int main(){
BT T;
int n,v;
while( ~scanf( "%d",&n ) ){
T = NULL;
for( int i=0 ; i<n ; i++ ){
scanf( "%d",&v );
add( T,v );
}
preOrder( T , 1 );
printf( "\n" );
}
}
相關文章
- 二叉搜尋樹的後序遍歷序列
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- JZ-023-二叉搜尋樹的後序遍歷序列
- [劍指offer] 二叉搜尋樹的後序遍歷序列
- 二叉樹的先中後序遍歷二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 二叉樹的後序遍歷post order演算法二叉樹演算法
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go
- 劍指 Offer 33. 二叉搜尋樹的後序遍歷序列
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 二叉樹--後序遍歷二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 二叉樹的層序遍歷二叉樹
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 判斷序列是否是二叉搜尋樹的後續遍歷
- 二叉樹的前中後序遍歷二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉搜尋樹(Binary Search Tree)(Java實現)Java
- LeeCode-94. 二叉樹的中序遍歷二叉樹
- LeetCode102.二叉樹的層序遍歷LeetCode二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- 二叉樹遍歷順序與方法小結二叉樹
- Leetcode——94.二叉樹的中序遍歷LeetCode二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- 非遞迴實現先序遍歷和中序遍歷遞迴