题目地址:https://leetcode.com/problems/find-bottom-left-tree-value/?tab=Description
Given a binary tree, find the leftmost value in the last row of the tree.
Example 1:
Input:
2
/ \
1 3
Output:
1
Example 2:
Input:
1
/ \
2 3
/ / \
4 5 6
/
7
Output:
7
Note: You may assume the tree (i.e., the given root node) is not NULL.
题目要求找到最底层从左到右第一个数字。
那么我们首先想到的就是按照层级遍历二叉树;
判断最底层就是这一层的节点都没用孩子;
最左边的那个就是这一层的第一个节点;
有了这些就好了:
public class FindBottomLeftTreeValue {
public static int findBottomLeftValue(TreeNode root) {
if (root == null)
return -1;
LinkedList<TreeNode> levelNodes = new LinkedList<>();
if (root.left == null && root.right == null)
return root.val;
levelNodes.add(root);
while (!levelNodes.isEmpty()) {
LinkedList<TreeNode> tempLevel = new LinkedList<>();
for (TreeNode node: levelNodes) {
if (node.left != null)
tempLevel.add(node.left);
if (node.right != null)
tempLevel.add(node.right);
}
if (tempLevel.isEmpty())
return levelNodes.get(0).val;
else {
levelNodes.clear();
levelNodes.addAll(tempLevel);
}
}
return -1;
}
public static void main(String[] args) {
TreeNode node = new TreeNode(1);
node.left = new TreeNode(2);
node.right = new TreeNode(3);
node.left.left = new TreeNode(4);
node.right.left = new TreeNode(5);
node.right.right = new TreeNode(6);
node.right.left.left = new TreeNode(7);
System.out.println(findBottomLeftValue(node));
}
}