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


