题解 | #输出二叉树的右视图#

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型一维数组 先序遍历
     * @param zhongxu int整型一维数组 中序遍历
     * @return int整型一维数组
     */
       public static int[] solve (int[] xianxu, int[] zhongxu) {
        // write code here
        List<Integer> list1=new ArrayList<Integer>();
        List<Integer> list2=new ArrayList<Integer>();//存储深度同一层的最右侧节点的值
        dfs(xianxu,zhongxu,0,xianxu.length-1,0,zhongxu.length-1,list1,list2,0,1);
        int[] rst=list2.stream().mapToInt(Integer::intValue).toArray();
        return rst;
    }
    public static void dfs(int[] preorder,int[] inorder,int prel,int prer,int inl,int inr,List<Integer> list1,List<Integer> list2,int order,int level){
        if(prel>prer||inl>inr){
            return;
        }
        int num=preorder[prel];
        int index=inl;
        while(inorder[index]!=num&&index<=inr){
            index++;
        }
        if(list2.size()<level){
            list2.add(num);
            list1.add(order);
        }else if(list1.get(level-1)<order){
            list2.set(level-1,num);
            list1.set(level-1,order);
        }
        //list2.set(level-1, num);
        int leftLength=index-inl;
        int rightLength=inr-index;
        dfs(preorder,inorder,prel+1,prel+leftLength,inl,index-1,list1,list2,2*order+1,level+1);
        dfs(preorder,inorder,prel+leftLength+1,prer,index+1,inr,list1,list2,2*order+2,level+1);
    } 
}

全部评论

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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