https://leetcode.cn/problems/find-bottom-left-tree-value/
题目要求
给定一个二叉树,在树的最后一行找到最左边的值。
层序遍历
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int res = -1;
while (!queue.isEmpty()) {
int n = queue.size();
for (int i = 0; i < n && !queue.isEmpty(); i++) {
TreeNode cur = queue.poll();
if (i == 0) res = cur.val;
if (cur.left != null) queue.offer(cur.left);
if (cur.right != null) queue.offer(cur.right);
}
}
return res;
}
}
递归
- da
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int deep = -1;
int res = 0;
public int findBottomLeftValue(TreeNode root) {
dfs(root, 0);
return res;
}
public void dfs(TreeNode node, int curDeep) {
if (node == null) return;
// 找到叶子结点
if (node.left == null && node.right == null) {
if (curDeep > deep) {
deep = curDeep;
res = node.val;
}
return;
}
dfs(node.left, curDeep + 1);
dfs(node.right, curDeep + 1);
}
}
思路
- 层序遍历到最后一层的最左边结点,就是树的最左下角的值;
- 递归中传递的是引用值,不共享改变,所以不用考虑回溯。