牛客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)的主要内容,如果未能解决你的问题,请参考以下文章