题解 | #牛群仰视图#
牛群仰视图
https://www.nowcoder.com/practice/0f37a18320c4466abf3a65819592e8be
知识点:二叉树,深度优先遍历
这道题目最好使用深度优先遍历,核心的思想在于找到所有的叶子节点,如果是使用层序遍历,我们不能保证二叉树是满二叉树,也就是不能保证所有的叶子节点都在最下面一层,使用层序遍历也就无法保证叶子节点从左往右的顺序排列。而对于DFS来说,我们无论使用先序遍历、中序遍历还是后序遍历,只要保证了是先遍历左节点后遍历右节点,就能保证叶子节点的遍历顺序。
Java题解如下
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整型一维数组 */ private List<Integer> list = new ArrayList<>(); public int[] bottomView (TreeNode root) { // write code here preOrder(root); int[] res = new int[list.size()]; for(int i = 0; i < list.size(); i++) { res[i] = list.get(i); } return res; } private void preOrder(TreeNode root) { if(root == null) { return; } if(root.left == null && root.right == null) { list.add(root.val); } preOrder(root.left); preOrder(root.right); } }