跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode:513.找二叉树左下角的
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
本体使用层序遍历感觉会更简单,但是下面使用的是递归遍历,用到了回溯;这里面使用前/中/后序都可以,因为这里不涉及中间节点的处理逻辑,需要找到的是叶子节点的值
// 深度的最大值int maxDepth = Integer.MIN_VALUE;// 结果int result;public int findBottomLeftValue(TreeNode root) {traversal(root, 0);return result;}private void traversal(TreeNode cur, int depth) {if (cur.left == null && cur.right == null) {if (depth > maxDepth) {// 只有找到更大深度的时候采取收集结果maxDepth = depth;result = cur.val;}}// 左if (cur.left != null) {// 回溯 也可以直接写成traversal(cur.left, depth++);depth++;traversal(cur.left, depth);depth--;}// 右if (cur.right != null) {depth++;traversal(cur.right, depth);depth--;}}