首页 > 编程语言 >代码随想录算法训练营第第18天 | 513.找树左下角的值 、112. 路径总和 、106.从中序与后序遍历序列构造二叉树

代码随想录算法训练营第第18天 | 513.找树左下角的值 、112. 路径总和 、106.从中序与后序遍历序列构造二叉树

时间:2024-05-26 17:11:18浏览次数:31  
标签:node right return val 随想录 二叉树 左下角 root left

找树左下角的值

本地递归偏难,反而迭代简单属于模板题, 两种方法掌握一下
题目链接/文章讲解/视频讲解:https://programmercarl.com/0513.找树左下角的值.html


/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var findBottomLeftValue = function(root) {
    let result = root.val;
    let maxDep = -Infinity;
    const traverse = (node, depth) => {
        if (node.left === null && node.right === null) {
            if (maxDep < depth) {
                maxDep = depth;
                result = node.val;
            }
            return;
        }
        if (node.left) {
            traverse(node.left, depth+1);
        }
        if (node.right) {
            traverse(node.right, depth+1);
        }
    }
    traverse(root, 0);
    return result
};

路径总和

本题 又一次设计要回溯的过程,而且回溯的过程隐藏的还挺深,建议先看视频来理解
112. 路径总和,和 113. 路径总和ii 一起做了。 优先掌握递归法。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0112.路径总和.html

这题自己写出跟题解不一样的递归,总算可以自己写出来了
function getTotal(node, total, target) {
    if (node.left === null && node.right === null) {
        total += node.val;
        if (total === target) {
            return true;
        } else {
            total -= node.val;
            return false;
        }
    }
    total += node.val
    if (node.left) {
        let flag = getTotal(node.left, total, target);
        if (flag) {
            return true;
        }
    }
    if (node.right) {
        let flag = getTotal(node.right, total, target);
        if (flag) {
            return true;
        }
    }
    total -= node.val;
    return false;

}

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} targetSum
 * @return {boolean}
 */
var hasPathSum = function(root, targetSum) {
    if (root == null) return false;
    let total = 0;
    let flag =  getTotal(root, total, targetSum);
    return flag;
};

从中序与后序遍历序列构造二叉树

本题算是比较难的二叉树题目了,大家先看视频来理解。
106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树 一起做,思路一样的
题目链接/文章讲解/视频讲解:https://programmercarl.com/0106.从中序与后序遍历序列构造二叉树.html

这题好难,基本没思路
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} inorder
 * @param {number[]} postorder
 * @return {TreeNode}
 */
var buildTree = function(inorder, postorder) {
    if (!inorder.length) return null;
    let rootVal = postorder.pop();
    let index = inorder.indexOf(rootVal);
    let root = new TreeNode(rootVal);
    root.left = buildTree(inorder.slice(0,index), postorder.slice(0,index));
    root.right = buildTree(inorder.slice(index+1), postorder.slice(index,))
    return root;
};

标签:node,right,return,val,随想录,二叉树,左下角,root,left
From: https://www.cnblogs.com/yuanyf6/p/18213972

相关文章

  • 数据结构:二叉树与树
    一树的基本概念:1.树的形状:2.树的定义:树是一种非线性的数据结构,它是n(n>=0)个结点的有限集。当n=0时,称为空树。在任意一棵非空树中应满足:2.1有且仅有一个特定的称为根的结点。2.2当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1……Tm,其中每个集合本身又是......
  • Day36 代码随想录打卡|二叉树篇---翻转二叉树
    题目(leecodeT226):给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。方法:迭代法翻转二叉树,即从根节点开始,一一交换每个节点的左右孩子节点,然后递归此过程,将根节点的左右孩子节点再分别作为参数传入交换节点的函数中。重复此过程,直到结束。就完成了二叉树的翻......
  • 二叉树翻转
    给定一棵二叉树的根节点 root,请左右翻转这棵二叉树,并返回其根节点。示例1:输入:root=[5,7,9,8,3,2,4]输出:[5,9,7,4,2,3,8]提示:树中节点数目范围在 [0,100] 内-100<=Node.val<=100思路:将二叉树看成一个只有左右子树的最小二叉树,那么翻转这个二叉树就是将左......
  • 代码随想录算法训练营第三十七天|435. 无重叠区间、763.划分字母区间、56. 合并区间、
    435.无重叠区间文档讲解:代码随想录题目链接:.-力扣(LeetCode)本道题与上个题目相似,都是求重叠区间统计重叠区间的个数,减去重叠区间的个数就是无重叠区间了主要就是为了让区间尽可能的重叠。(为什么)按照左边界排序①如果i的左边界大于等于上一个区间的右边界,就没有重叠......
  • 101. 对称二叉树
    给定一个二叉树,检查它是否是镜像对称的。思路:判断左子树和右子树是否可以相互翻转。外侧与外侧比较,内侧与内侧比较。使用哪种遍历方式?这道题只能使用后序(左右中)。因为我们要不断收集左右孩子的信息,返回给上一个节点。然后判断以根节点的左孩子为根节点的信息,和根......
  • 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二
    104.二叉树的最大深度题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/文档讲解:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE......
  • Java数据结构与算法(平衡二叉树)
    前言平衡二叉树是为了提高二叉树的查询速度,通过满足特定的条件来保持其平衡性。平衡二叉树具有以下特点:左子树和右子树的高度差不会大于1,这是为了确保树的高度不会过大,从而减少查询时的磁盘I/O开销,提高查询速度。平衡二叉树上的所有结点的平衡因子(左子树深度减去右子树深度的......
  • 代码随想录算法训练营第36期DAY38
    DAY38435无重叠区间昨晚很快就想出来了,今天相当于二刷。class Solution {public:    static bool mycmp(vector<int>&a,vector<int>&b){        return a[1]<b[1];    }    int eraseOverlapIntervals(vector<vector<int>>& intervals) {   ......
  • 代码随想录算法训练营第36期DAY39
    道心破碎的一天,继续加油吧,坚持努力。DAY39738单调递增的数字暴力法:没有想到用inti=n;i>0;i--来遍历。class Solution {private:    bool checknum(int num){        if(num<10) return true;        while(num/10!=0){           ......
  • 代码随想录算法训练营第36期DAY37
    DAY37先二刷昨天的3道题目,每种方法都写:是否已完成:是。报告:134加油站的朴素法没写对。原因是:在if中缺少了store>=0的判断,只给出了index==i的判断。前进法没写出来。因为忘记了总油量的判断。Sum。注意变量的初始化。分配糖果注意if里面放的是ratings;860柠檬水找零网上摘得思......