39.输出二叉树的右视图

题目:请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图

思路:先根据前序遍历和中序遍历,得到二叉树。根据先序顺序得到根,再根据根得到其在中序遍历中的位置,然后得到左右子树的size,从而得到左右子树的先序遍历和中序遍历。最后利用栈按照层序遍历,每层最后一个输出的加入到ArrayList,因为ArrayList是动态数组,方便增删,最后再转换成数组的形式输出。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型一维数组 先序遍历
     * @param zhongxu int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    private Map map = new HashMap();
    public int[] solve (int[] xianxu, int[] zhongxu) {
        // write code here
        if(xianxu.length == 0 || zhongxu.length == 0) return new int[0];
        for(int i=0;i queue = new LinkedList();
        ArrayList list = new ArrayList();
        queue.add(node);
        while(!queue.isEmpty()){
            int size = queue.size();
            for(int i=0;i=preEnd || vinBegin>=vinEnd) return null;
        TreeNode node = new TreeNode(xianxu[preBegin]);
        int vinIndex = map.get(xianxu[preBegin]);
        int size = vinIndex - vinBegin;
        node.left = createBinaryTree(xianxu,preBegin+1,preBegin+1+size,vin,vinBegin,vinIndex);
        node.right = createBinaryTree(xianxu,preBegin+1+size,preEnd,vin,vinIndex+1,vinEnd);
        return node;
        
    }
}

你可能感兴趣的:(leetcode)