LeetCode-513-找树左下角的值--bfs
给定一个二叉树,在树的最后一行找到最左边的值。
示例 1:
输入:
2 / 1 3
输出: 1
示例 2:
输入:
1 / 2 3 / / 4 5 6 / 7
输出: 7
注意: 您可以假设树(即给定的根节点)不为 NULL。
方法一:迭代法
思路:
- 在层次遍历的过程中,每次记录每一层的第一个元素。遍历完记录的则是答案。
- 外层循环处理每一层,内层循环处理每一层的数据。
class Solution { public int findBottomLeftValue(TreeNode root) { // 1. 创建队列和一个结果变量用来存储每一行最左边的值 Queue<TreeNode> queue = new LinkedList<>(); int ans = 0; // 2. 根节点入队 queue.offer(root); // 3. 遍历每一层的数据 while(!queue.isEmpty()) { int size = queue.size(); ans = queue.peek().val; // 存储每一层的第一个元素 while(size > 0) { TreeNode node = queue.poll(); //判断是否有左节点 if (node.left != null) { queue.offer(node.left); } //判断是否有右节点 if (node.right != null) { queue.offer(node.right); } size--; } } return ans; } }
方法二:递归
思路:
- 采用中序遍历,记录最深处,最左边的元素。
- 递归的过程中,深度加深了,就需要记录当前的深度,并记录当前值。
class Solution { int maxDeep = -1; int ans; public int findBottomLeftValue(TreeNode root) { midOrder(root, 0); return ans; } public void midOrder(TreeNode root, int deep) { if (root == null) return ; midOrder(root.left, deep + 1); // 判断深度是否加深 if (deep > maxDeep) { maxDeep = deep; ans = root.val; } midOrder(root.right, deep + 1); } }
上一篇:
IDEA上Java项目控制台中文乱码