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> ans = new ArrayList<>(); if (root == null) return new int[0]; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { int n = queue.size(); for (int i = 0; i < n; i++) { TreeNode node = queue.poll(); if (i == 0) ans.add(node.val); if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } } int[] result = new int[ans.size()]; for (int i = 0; i < ans.size(); i++) { result[i] = ans.get(i); } return result; } }
代码使用的编程语言是Java。
该题考察的知识点包括树的遍历和BFS(广度优先搜索)算法。
代码的解释如下:
- 首先定义了一个 TreeNode 类,表示二叉树的节点,包括节点的值 val、左子节点 left 和右子节点 right。
- 在 Solution 类中,定义了一个 leftSideView 方法,该方法接收一个 TreeNode 类型的参数 root,表示给定的二叉树的根节点。方法的返回类型为 int[],表示二叉树的左视图节点值。
- 在方法中,先创建了一个空的 ArrayList 对象 ans,用于存储左视图节点的值。
- 如果给定的根节点 root 为空,则直接返回一个空的 int[] 数组,表示左视图为空。
- 创建一个 Queue 对象 queue,用于辅助进行BFS算法。将根节点 root 入队。
- 进入 while 循环,当队列不为空时进行迭代。
- 在每次迭代中,首先获取当前层级的节点数量 n,然后遍历当前层级的节点。
- 依次从队列中出队一个节点 node。如果是当前层级的第一个节点(i == 0),则将其值 node.val 加入到 ans 列表中。
- 如果节点 node 的左子节点不为空,则将其左子节点入队。如果右子节点不为空,则将其右子节点入队。
- 循环结束后,已经遍历完了二叉树的所有节点,并且将左视图节点的值存储在 ans 列表中。
- 创建一个大小为 ans.size() 的 int[] 数组 result。
- 遍历 ans 列表,将其中的元素依次赋值给 result 数组。
- 最后返回 result 数组作为方法的结果,即二叉树的左视图节点值。
该算法使用 BFS(广度优先搜索)的思想,通过层级遍历二叉树,保证每一层的第一个节点一定是左视图节点。最终得到的 result
数组就是二叉树的左视图节点值。