题解 | #牛群左侧视图#
牛群左侧视图
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; } }
知识点:
- 二叉树的遍历:本题需要进行二叉树的遍历,其中包括层序遍历。
- 二叉树的数据结构:树节点的表示,可能包括树的节点类的定义。
- 数组的操作:将结果存储为数组,数组的大小变化等。
题目解答方法:
- 首先,我们需要定义一个树节点的类,用于表示二叉树的节点。
- 实现层序遍历:通过队列来实现层序遍历,从根节点开始,依次将每一层的节点加入队列,然后按层级遍历队列,同时记录每层第一个节点的值,这些值就是从左侧能够看到的牛的编号。
- 将结果存储为数组:遍历过程中记录每一层第一个节点的值,并将这些值存储在数组中,最终返回该数组。