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

输出二叉树的右视图

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求二叉树的右视图
     * @param preOrder int整型一维数组 先序遍历
     * @param inOrder int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] preOrder, int[] inOrder) {
        TreeNode root = reBuild(preOrder, inOrder);
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        ArrayList<Integer> lists = new ArrayList<Integer>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            while (size-- != 0) {
                TreeNode temp = queue.poll();
                if (temp.left != null)
                    queue.offer(temp.left);
                if (temp.right != null)
                    queue.offer(temp.right);
                //最右元素
                if (size == 0)
                    lists.add(temp.val);
            }
        }
        int[] res = new int[lists.size()];
        for (int i = 0; i < lists.size(); i++)
            res[i] = lists.get(i);
        return res;
    }
    private TreeNode reBuild(int[] preOrder, int[] inOrder) {
        if(preOrder.length==0||inOrder.length==0)
            return null;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        TreeNode root = new TreeNode(preOrder[0]);
        TreeNode cur = root;
        for (int i = 1, j = 0; i < preOrder.length; i++) {
            if (cur.val != inOrder[j]) {
                cur.left = new TreeNode(preOrder[i]);
                stack.push(cur);
                cur = cur.left;
            } else {
                j++;
                while (!stack.isEmpty() && stack.peek().val == inOrder[j]) {
                    cur = stack.pop();
                    j++;
                }
                cur.right = new TreeNode(preOrder[i]);
                cur = cur.right;
            }
        }
        return root;
    }
}

全部评论

相关推荐

04-08 13:31
已编辑
门头沟学院 前端工程师
D0cC:京东营收1万多亿人民币,阿里9000多亿,虽然他俩利润都没腾讯和字节多,但是很恐怖了啊,负担了多少打工人的薪水
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
牛客928043833号:在他心里你已经是他的员工了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务