二叉树17:找树左下⻆的值
Posted 纵横千里,捭阖四方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树17:找树左下⻆的值相关的知识,希望对你有一定的参考价值。
LeetCode513:给定一个二叉树,在树的最后一行找到最左边的值。
输出结果为7
题使用层序遍历再合适不过了,比递归要好理解的多! 只需要记录最后一行第一个节点的数值就可以了。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int findBottomLeftValue(TreeNode root) {
if (root.left == null && root.right == null) {
return root.val;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
TreeNode temp = new TreeNode(-100);
while (!queue.isEmpty()) {
temp = queue.poll();
if (temp.right != null) {
// 先把右节点加入 queue
queue.offer(temp.right);
}
if (temp.left != null) {
// 再把左节点加入 queue
queue.offer(temp.left);
}
}
return temp.val;
}
}
如果用递归该怎么做呢?
1.使用curMaxDepth代表当前遍历到的最大深度,depth记录遍历的深度
比如curMaxDepth=5,如果前序遍历到depth=2时,小于curMaxDepth,你就知道这一层已经有人到过了,你不是这一层的第一个,就这么简单
2.如果depth>curMaxDepth
就说明这一层你的depth>curMaxDepth,就说明你depth这一层没人到过,而且你是第一个
这样你就更新curMaxDepth为当前这个depth就可以
class Solution {
private int curMaxDepth=-1,curVal=0;
public int findBottomLeftValue(TreeNode root) {
help(root,0);
return curVal;
}
private void help(TreeNode root,int depth){
if(root==null){return;}
if(depth>curMaxDepth){
curMaxDepth=depth;
curVal=root.val;
}
help(root.left,depth+1);
help(root.right,depth+1);
}
}
我曾尝试找出哪些题适合前序,哪些适合中序,哪些适合层次遍历,但是做到这个题之后我彻底放弃这个想法,因为很多问题都可以从不同的视角来解决问题。因此深入理解四种遍历方式的原理,然后见招拆招才是真正该训练的东西。
以上是关于二叉树17:找树左下⻆的值的主要内容,如果未能解决你的问题,请参考以下文章