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

输出二叉树的右视图

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型一维数组 先序遍历
     * @param zhongxu int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] xianxu, int[] zhongxu) {
        Map<Integer, List<Integer>> map = new HashMap<>();
        build(xianxu, zhongxu, 0, map);
        int[] result = new int[map.size()];
        for (int i = 0; i < result.length; i++) {
            result[i] = map.get(i).get(map.get(i).size() - 1);
        }
        return result;

    }
    public void  build(int[] xianxu, int[] zhongxu, int level,
                       Map<Integer, List<Integer>> result) {
        if (xianxu.length == 0 || zhongxu.length == 0) {
            return;
        }
        for (int i = 0; i < zhongxu.length; i++) {
            if (xianxu[0] == zhongxu[i]) {
                int[] zx_left = Arrays.copyOfRange(zhongxu, 0, i);
                int[] zx_right = Arrays.copyOfRange(zhongxu, i + 1, zhongxu.length);
                int[] xx_left = Arrays.copyOfRange(xianxu, 1, i + 1);
                int[] xx_right = Arrays.copyOfRange(xianxu, i + 1, xianxu.length);
                build(xx_left, zx_left, level + 1, result); // 先左边
                if (!result.containsKey(level)) {
                    result.put(level, new ArrayList<>());
                }
                List<Integer> list = result.get(level);
                list.add(xianxu[0]);
                build(xx_right, zx_right, level + 1, result); // 再右边
                break;
            }
        }
    }
}

题目和重建二叉树很像,但是在重建的过程中,其实很像中序遍历,我们遍历的过程中,将结果存储在map中,map中保存的结果如下

key:integer

value:list

0层:1

1层:2,3

2层: 5,7,9

最后遍历map获取最后的值即可

全部评论

相关推荐

头像
昨天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务