思路
一层一层用队列保存,到达最后一层时保存最左侧的值。但是由于我们不方便判断何时到达最后一层,所以我们可以遍历每一层的时候都覆盖掉原先的leftValue~
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue1 = new LinkedList<>(), queue2 = new LinkedList<>();
queue1.offer(root);
int leftValue = root.val;
while (!queue1.isEmpty()) {
TreeNode node = queue1.poll();
if (null != node.left)
queue2.offer(node.left);
if (null != node.right)
queue2.offer(node.right);
if (queue1.isEmpty()) {
queue1 = queue2;
queue2 = new LinkedList<>();
if(!queue1.isEmpty())
leftValue = queue1.peek().val;
}
}
return leftValue;
}
}
Go代码
func findBottomLeftValue(root *TreeNode) int {
q1, q2 := []*TreeNode{root}, []*TreeNode{}
result := root.Val
for len(q1) != 0 {
node := q1[0]
q1 = q1[1:]
if node.Left != nil {
q2 = append(q2, node.Left)
}
if node.Right != nil {
q2 = append(q2, node.Right)
}
if len(q1) == 0 {
q1 = q2
q2 = []*TreeNode{}
if len(q1) != 0 {
result = q1[0].Val
}
}
}
return result
}