输出二叉树的右视图

日常看不懂系列

  public TreeNode buildTree(int[] xianxu,int l1,int r1,int[] zhongxu,int l2,int r2){
       if(l1>r1||l2>r2){
           return null;
       }

       TreeNode root=new TreeNode(xianxu[l1]);

       int rootIndex=0;

       for (int i=l2;i<=r2;i++){
           if(zhongxu[i]==xianxu[l1]){
               rootIndex=i;
               break;
           }
       }

       int leftsize=rootIndex-l2;
       int rightsize=r2-rootIndex;
       root.left=buildTree(xianxu,l1+1,l1+leftsize,zhongxu,l2,l2+leftsize-1);
       root.right=buildTree(xianxu,r1-rightsize+1,r1,zhongxu,rootIndex+1,r2);
       return root;
   }

   public ArrayList<Integer> rightSideView(TreeNode root){
       Map<Integer,Integer> mp=new HashMap<Integer,Integer>();
       int max_depth=-1;
       Stack<TreeNode> nodes=new Stack<TreeNode>();
       Stack<Integer> depths=new Stack<Integer>();
       nodes.push(root);
       depths.push(0);
       while (!nodes.isEmpty()){
           TreeNode node=nodes.pop();
           int depth=depths.pop();
           if(node!=null){
               max_depth=Math.max(max_depth,depth);
               if(mp.get(depth)==null) mp.put(depth,node.val);
               nodes.push(node.left);
               nodes.push(node.right);
               depths.push(depth+1);
               depths.push(depth+1);
           }
       }
       ArrayList<Integer> res=new ArrayList<Integer>();

       for (int i=0;i<=max_depth;i++){
           res.add(mp.get(i));
       }

       return res;
   }
   public int[] solve(int[] xianxu,int[] zhongxu){
       if(xianxu.length==0) return new int[0];

       TreeNode root=buildTree(xianxu,0,xianxu.length-1,zhongxu,0,zhongxu.length-1);
       ArrayList<Integer> temp=rightSideView(root);
       int[] res=new int[temp.size()];
       for (int i=0;i< temp.size();i++){
           res[i]=temp.get(i);
       }
       return res;

   }


全部评论

相关推荐

今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,也有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务