题解 | #牛群左侧视图#

牛群左侧视图

https://www.nowcoder.com/practice/1eba2dd947484c078e6359ccd90aa7b1?tpId=354&tqId=10591693&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型一维数组
     */
    public int[] leftSideView (TreeNode root) {
        // write code here
        List<Integer> result = new ArrayList<>();
        if (root == null) {
            return listToArray(result);
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (i == 0) {
                    result.add(node.val);
                }
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }

        return listToArray(result);
    }

    private int[] listToArray(List<Integer> result){
        int[] resultArray = new int[result.size()];
for (int i = 0; i < result.size(); i++) {
    resultArray[i] = result.get(i);
}
return resultArray;
    }

}

知识点:

  1. 二叉树的遍历:本题需要进行二叉树的遍历,其中包括层序遍历。
  2. 二叉树的数据结构:树节点的表示,可能包括树的节点类的定义。
  3. 数组的操作:将结果存储为数组,数组的大小变化等。

题目解答方法:

  1. 首先,我们需要定义一个树节点的类,用于表示二叉树的节点。
  2. 实现层序遍历:通过队列来实现层序遍历,从根节点开始,依次将每一层的节点加入队列,然后按层级遍历队列,同时记录每层第一个节点的值,这些值就是从左侧能够看到的牛的编号。
  3. 将结果存储为数组:遍历过程中记录每一层第一个节点的值,并将这些值存储在数组中,最终返回该数组。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务