一、题目描述
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
二、代码思路
使用 height 记录遍历到的节点的高度,curVal 记录高度在 curHeight 的最左节点的值。在深度优先搜索时,我们先搜索当前节点的左子节点,再搜索当前节点的右子节点,然后判断当前节点的高度 height 是否大于 curHeight,如果是,那么将 curVal 设置为当前结点的值,curHeight 设置为 height。
因为我们先遍历左子树,然后再遍历右子树,所以对同一高度的所有节点,最左节点肯定是最先被遍历到的。
二、使用bfs更为直观
就是把遍历的每一层的第一个元素拿出来,这样拿到最后一层的第一个元素即可。
三、代码题解
/**
* 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 curHeight = 0;
int curVal = 0;
private void dfs(TreeNode node, int height) {
if (node == null) return;
height++;
dfs(node.left, height);
dfs(node.right, height);
if (height > curHeight) {
curHeight = height;
curVal = node.val;
}
}
public int findBottomLeftValue(TreeNode root) {
dfs(root, 0);
return curVal;
}
}