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

输出二叉树的右视图

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 = getOriginalNode(preOrder,inOrder);

        ArrayList<Integer> asList = new ArrayList<Integer>();

        ArrayList<TreeNode> level = new ArrayList<TreeNode>();

        level.add(root);

        while(!level.isEmpty()){
            asList.add(level.get(level.size()-1).val);
            ArrayList<TreeNode> temp = new ArrayList<TreeNode>();

            for(TreeNode node:level){
               if(node.left!=null) temp.add(node.left);
               if(node.right!=null) temp.add(node.right);
            }
            level = temp;
        }
        int[] result = new int[asList.size()];

        for(int i =0;i<asList.size();i++){
            result[i] = asList.get(i);
        }
        return result;
    }

    public TreeNode getOriginalNode(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(preOrder[0] == inOrder[i]){
                root.left = getOriginalNode(Arrays.copyOfRange(preOrder,1,i+1),Arrays.copyOfRange(inOrder,0,i));
                root.right = getOriginalNode(Arrays.copyOfRange(preOrder,i+1,preOrder.length),Arrays.copyOfRange(inOrder,i+1,inOrder.length));
            }
        }

        return root;

    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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