题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
import java.util.*; public class Solution { private Map<Integer, Integer> map = new HashMap<>(); private List<Integer> res = new ArrayList<>(); /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 求二叉树的右视图 * @param preOrder int整型一维数组 先序遍历 * @param inOrder int整型一维数组 中序遍历 * @return int整型一维数组 */ public int[] solve (int[] preOrder, int[] inOrder) { if (preOrder.length == 0) { return null; } for (int i = 0; i < inOrder.length; ++i) { map.put(inOrder[i], i); } // 建树 TreeNode root = reBuild(preOrder, 0, preOrder.length - 1, inOrder, 0, inOrder.length - 1); // 层级遍历 return rightSideView(root); } private TreeNode reBuild(int[] preOrder, int pl, int pr, int[] inOrder, int il, int ir) { if (pl > pr) { return null; } TreeNode node = new TreeNode(preOrder[pl]); int index = map.get(preOrder[pl]); node.right = reBuild(preOrder, pl + index - il + 1, pr, inOrder, index + 1, ir); node.left = reBuild(preOrder, pl + 1, pl + index - il, inOrder, il, index - 1); return node; } private int[] rightSideView(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); List<Integer> res = new ArrayList<>(); while (!queue.isEmpty()) { int size = queue.size(); TreeNode node = null; while (--size >= 0) { node = queue.poll(); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } res.add(node.val); } return res.stream().mapToInt(Integer::intValue).toArray(); } }