牛客Top200---输出二叉树的右视图(java)

Posted 小样5411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客Top200---输出二叉树的右视图(java)相关的知识,希望对你有一定的参考价值。

题目

思路

首先,需要重建二叉树,这个之前碰到过,重建二叉树跳转链接,然后可以对重建后的二叉树进行层次遍历,将每层最后一个节点值放入数组中,最后层次遍历结束返回数组即可,这里数组由于需要知道大小,所以要先用ArrayList来新增每层最后一个元素

import java.util.*;

public class Solution {
    public int[] solve (int[] xianxu, int[] zhongxu) {
        TreeNode root = reConstructBinaryTree(xianxu,zhongxu);//重建二叉树
        //层次遍历输出二叉树的右视图
        Queue<TreeNode> queue = new LinkedList<>();
        ArrayList<Integer> list = new ArrayList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            int size = queue.size();
            //遍历出栈,当为最后一个则将值添加到数组
            for(int i = 0 ; i < size ; i++){
                //每层出栈
                TreeNode node = queue.poll();
                if(i == size - 1){
                    //每层最后一个节点值加入数组
                    list.add(node.val);
                }
                //左右节点入队
                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
        }
        //返回数组
        int len = list.size();
        int[] res = new int[len];
        for(int j = 0 ; j < len ; j++){
            res[j] = list.get(j);
        }
        return res;
    }
    //重建二叉树
    private TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if(pre.length == 0 || in.length == 0){
	        return null;//递归条件
        }
        TreeNode node = new TreeNode(pre[0]);
        for(int i = 0 ; i < pre.length ; i++){
            //先找到根节点对应在中序遍历中的位置
            if(pre[0] == in[i]){
                node.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1), Arrays.copyOfRange(in,0,i));
                node.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length), Arrays.copyOfRange(in,i+1,in.length));
            }
        }
        return node;
    }
}

以上是关于牛客Top200---输出二叉树的右视图(java)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构树相关代码(数据结构笔试复测Leecode牛客)

Leetcode No.199 二叉树的右视图

LeetCode Java刷题笔记—199. 二叉树的右视图

牛客Top200---二叉树和为指定值的路径(java)

LeetCode 199 二叉树的右视图

广度优先搜索199.二叉树的右视图