文章目录
- 题目
- 方法一:前序递归
- 方法二:层序遍历
题目
方法一:前序递归
在递归遍历到叶子结点时,对比此时的节点深度,若当前节点深度大于当前最大深度,就更新value值,最后记录下的value即为最下最左的节点值
带值(深度)递归(纯递归)
class Solution {int Deep = -1;int value = 0;public int findBottomLeftValue(TreeNode root) {dfs(root,0);return value ;}public void dfs(TreeNode root,int depth){if(root == null) return;if(root.left == null &&root.right == null) {if(depth >Deep){Deep = depth;value = root.val;}}dfs(root.left,depth+1);dfs(root.right,depth+1);}
}
不带值(深度)递归(递归+深度回溯)
class Solution {int Deep = -1;int value = 0;int depth = 0;public int findBottomLeftValue(TreeNode root) {dfs(root);return value ;}public void dfs(TreeNode root){if(root == null) return;if(root.left == null &&root.right == null) {if(depth >Deep){Deep = depth;value = root.val;}}depth++;dfs(root.left);dfs(root.right);depth--;}
}
方法二:层序遍历
层序遍历 按照从右向左加入每层节点的值,这样每层取出节点的时候,最后记录的就是每一层最左的节点值,然后直到最后一层,记录下最后一层最左的值
public int findBottomLeftValue(TreeNode root) {int res = 0;Deque<TreeNode> queue = new ArrayDeque<>();queue.offer(root);while(!queue.isEmpty()){root = queue.poll();res = root.val;if(root.right!=null) queue.offer(root.right);//按照从右向左加入每层节点的值,这样每层取出节点的时候,最后记录的就是每一层最左的节点值if(root.left!=null) queue.offer(root.left);}return res;}