[leetCode513] 找树左下角的值(递归、迭代两种方法)
两种方法,迭代和递归。 看到这道题我的第一反应是树的层序遍历,找到最后一层的第一个节点就可以了,代码如下:
class Solution {
//利用队列实现层序遍历
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
int size=queue.size();
int t=0;
for (int i=0;i<size;i++){
TreeNode head = queue.poll();
if (head.left!=null) queue.add(head.left);
if (head.right!=null) queue.add(head.right);
if (i==0) t=head.val;
}
if (queue.isEmpty()) return t;
}
return 0;
}
}
也可以使用递归的方法,递归的终止条件是找到了叶子节点,找到之后判断是否更新了最大深度,如果更新了,就记录这个值。 那怎么判断它是这个深度的最左边的节点呢 ? 其实是在递归的次序上做手脚,因为我们先递归左侧的子节点,所以第一次更新最大深度的时候,这个节点也一定是最左侧节点。下次如果遇到了同样深度的右侧节点,不会再触发更新。 代码如下:
public class Solution {
int maxDepth=0;
int leftVal=0;
public int findBottomLeftValue(TreeNode root) {
traversal(root,1);
return this.leftVal;
}
public void traversal(TreeNode root,int leftLen){
if (root.left==null&&root.right==null){
if (leftLen>maxDepth){
maxDepth=leftLen;
leftVal= root.val;
}
return;
}
if (root.left!=null) traversal(root.left,1+leftLen);
if (root.right!=null) traversal(root.right,1+leftLen);
}
}
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
【前端面试宝典】首发
