题目描述
bfs
我的想法就是先想到普通的bfs都是从左到右一行一行扫下去,那么队列中最后一个元素也就是树最后一行最右边的结点。所以,只要改成从右到左一行一行扫描下去,那么最后一个就是最后一行最左边的结点了。
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(que.size()!=1 || !judge(que.element())){
TreeNode cur = que.poll();
if(cur.right!=null) que.offer(cur.right);
if(cur.left!=null) que.offer(cur.left);
}
return que.element().val;
}
//没有儿子则返回true
public boolean judge(TreeNode root){
return root.left==null && root.right==null;
}
}
改进:把while的条件改成que.isEmpty(),然后每一次循环都记录当前节点的值。这么做的原因是que.size()会遍历整个队列,会占用资源。