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

输出二叉树的右视图

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) {
        // write code here
        TreeNode root = buildTree(preOrder, inOrder);
        List<Integer> ans = new LinkedList<>();
        Queue<TreeNode> que = new LinkedList<>();
        if(root != null)que.offer(root);
        while(!que.isEmpty()){
            int size = que.size();
            while(size > 0){
                TreeNode cur = que.poll();
                size--;
                if(cur.left != null)que.offer(cur.left);
                if(cur.right != null)que.offer(cur.right);
			  // 每层最后一个元素即是最右边节点
                if(size == 0){
                    ans.add(cur.val);
                }
            }
        }
        return ans.stream().mapToInt(Integer::intValue).toArray();
    }
  /**
  递归构建二叉树
  */
    private TreeNode buildTree(int[] preOrder, int[] inOrder){
        if(preOrder.length == 0 || inOrder.length == 0)return null;
        TreeNode root = new TreeNode(preOrder[0]);
        for(int i = 0; i < inOrder.length; i++){
            if(inOrder[i] == preOrder[0]){
                int[] preLeft = new int[i];
                System.arraycopy(preOrder, 1, preLeft, 0, i);
                int[] preRight = new int[preOrder.length-i-1];
                System.arraycopy(preOrder, i+1, preRight, 0, preRight.length);
                int[] inLeft = new int[i];
                System.arraycopy(inOrder, 0, inLeft, 0, i);
                int[] inRight = new int[preRight.length];
                System.arraycopy(inOrder, i+1, inRight, 0, preRight.length);
                root.left = buildTree(preLeft, inLeft);
                root.right = buildTree(preRight, inRight);
                break;
            }
        }
        return root;
    }
}

递归构建二叉树+层序遍历

全部评论

相关推荐

09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
Hyh_111:像这种hr就不用管了,基本没啥实力,换一个吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务