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

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

看见进步:

真棒,Good job! 这次是自己做出整个二叉树的最后一道题目了,都是前面所有的题目,积累的知识厚积薄发,带来的效果,真棒!真棒!真棒!棒棒棒!

解题思路:

1、用BM40的思路,重构二叉树

2、用层次遍历的方法,获得最有子节点

import java.util.*;


public class Solution {
    /*
     * 求二叉树的右视图
     * @param preOrder int整型一维数组 先序遍历
     * @param inOrder int整型一维数组 中序遍历
     * @return int整型一维数组
     */
    public int[] solve (int[] preOrder, int[] inOrder) {
        TreeNode root = deConstructTreeNode(preOrder,inOrder);
        ArrayList<Integer> res = getSloveArray(root);
        int[] resArr = res.stream().mapToInt(i->i).toArray();
        return resArr;
    }

    /**
     * 层次遍历整个二叉树,获得最后一个节点
     */
    public ArrayList<Integer> getSloveArray(TreeNode root) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        if(root == null) {
            return res;
        }

        ArrayDeque<TreeNode> q = new ArrayDeque<>();
        q.offer(root);
        while(!q.isEmpty()) {
            int n = q.size();
            for(int i=0; i<n; i++) {
                TreeNode node = q.poll();
                if(i== n-1) {
                    res.add(node.val);
                }
                if(node.left!=null) {
                    q.offer(node.left);
                }
                if(node.right!=null) {
                    q.offer(node.right);
                }
            }
        } 
        return res;

    }


    public TreeNode deConstructTreeNode(int[] pre, int[] vin) {
        int m = pre.length;
        int n = vin.length;
        if(m ==0 || n == 0) {
            return null;
        }

        TreeNode root = new TreeNode(pre[0]);
        for(int i=0; i<n; i++) {
            if(pre[0] == vin[i]) {
                root.left = deConstructTreeNode(
                    Arrays.copyOfRange(pre, 1, i+1),
                    Arrays.copyOfRange(vin, 0, i)
                );
                root.right = deConstructTreeNode(
                    Arrays.copyOfRange(pre, i+1, n),
                    Arrays.copyOfRange(vin, i+1, n)
                );
            }
        }
        return root;
    }


}
全部评论

相关推荐

想申请延毕了,找工作找到崩溃,越找就越想摆烂,还有25届的和我一样感受吗?
码农索隆:没事哒,好兄弟,慢慢来,调整心态,车到山前必有路,感到迷茫的时候,多抬头看看
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求职打法:注意把武大标粗标大 本地你俩不是乱杀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务