码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构 - Codeforces Round #353 (Div. 2) D. Tree Construction

时间:2016-05-20 18:59:19      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

Tree Construction 

Problem‘s Link

 ----------------------------------------------------------------------------

Mean: 

给定n个数,按照构造Binary Search Tree的方式来构造BST树,按顺序输出每一个非root结点的父节点的值。

analyse:

构造BST树最坏情况下时间复杂度为O(n),肯定会超时。

注意到只需要输出结点的父节点的值,不需要真的构造BST树。

插到第i个结点时,我们在前i-1个结点中找两个数,一个是比Ai大的最小数,一个是比Ai小的最大数。

那么Ai的父节点肯定是这两个中的一个,到底是哪一个呢,根据画图分析,可以得出是后来插入的那个。

如下图所示:

技术分享

做法:用java里面的容器TreeMap<Integer,Integer>来存储<value,index>对,根据value值来查找,然后比较这两个数的index大小来判断谁是父节点。

 

Time complexity: O(n*logn)

 

view code

1.使用java容器实现
import java.io.BufferedInputStream;
import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeSet;

public class Main{
   public static void main(String[]argv){
       Scanner in=new Scanner(new BufferedInputStream(System.in));
       while(in.hasNext()){
           int n=in.nextInt();
           TreeSet<Integer> vals=new TreeSet<>();
           HashMap<Integer,Integer> idx=new HashMap<>();
           int val=in.nextInt();
           vals.add(val);
           idx.put(val,0);
           for(int i=1;i<n;++i){
               val=in.nextInt();
               Integer hi=vals.higher(val), lo=vals.lower(val);
               if(hi==null)
                   System.out.print(lo+" ");
               else if(lo==null)
                   System.out.print(hi+" ");
               else {
                   Integer hiIdx=idx.get(hi);
                   Integer loIdx=idx.get(lo);
                   if(hiIdx>loIdx)
                       System.out.print(hi+" ");
                   else
                       System.out.print(lo+" ");
               }
               vals.add(val);
               idx.put(val,i);
           }
           System.out.println();
       }
   }
}
 
 
2.线段树实现

数据结构 - Codeforces Round #353 (Div. 2) D. Tree Construction

标签:

原文地址:http://www.cnblogs.com/crazyacking/p/5513034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!