JAVA版本
解法一:
使用递归的方法,找到也在最左下角的叶子节点。从最高层开始向下去寻找,同时记录二叉树结点的深度,找到最大深度的左结点。
class Solution {
int Deep = -1;
int value=0;
public int findBottomLeftValue(TreeNode root) {
value = root.val;
firstdeep(root ,0);
return value;
}
void firstdeep(TreeNode root , int deepth){
if(root ==null){
return;
}
if(root.left== null && root.right == null) { //找的是叶子
if(deepth > Deep) {
Deep = deepth;
value = root.val;
}
}
if (root.left != null){
firstdeep(root.left , deepth+1);
}
if (root.right != null){
firstdeep(root.right , deepth+1);
}
}
}
解法二:
笔者的思路是使用层序遍历的方法,一层一层的去遍历,每一层中的第一个就是最左边的叶子结点,直到找到最后一层的值。
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int res = 0;
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
if (i == 0) { //每一层中的第一个结点
res = poll.val;
}
if (poll.left != null) {
queue.offer(poll.left);
}
if (poll.right != null) {
queue.offer(poll.right);
}
}
}
return res;
}
}