代码编织梦想

题目链接:

538. 把二叉搜索树转换为累加树

大概思路:

题目要求:

给一颗二叉搜索树,把里面各个节点的值,都等于树里面,所有大于等于这个节点的,各个节点值之和。如下图,比如 7只有8大于它,累加后,7变成 7+8=15.

 

思路:

二叉搜索树的中序遍历左中右,其遍历的节点值,可以看成是一个升序数组,那么右中左就是降序数组,从最大值开始递减,为了方便累加,用倒序的中序遍历右中左,然后用双指针法,一个向前遍历同时累加更新数值,一个记录它上一个节点累加搜集到的数值,到遍历结束,累加树也就完成了。

递归三部曲:

1.确定递归函数参数和返回类型:

参数根节点,无返回值,这个函数就是更新数值

void traversal(TreeNode* cur) { // 右中左遍历

2.明确终止条件:

遇见空返回。

if (cur == NULL) return;

3.确定递归单层逻辑:

反中序遍历,加不断更新数值。

        traversal(cur->right);
        cur->val += pre;
        pre = cur->val;
        traversal(cur->left);

4.总代码:

class Solution {
private:
    int pre = 0; // 记录前一个节点的数值
    void traversal(TreeNode* cur) { // 右中左遍历
        if (cur == NULL) return;
        traversal(cur->right);
        cur->val += pre;
        pre = cur->val;
        traversal(cur->left);
    }
public:
    TreeNode* convertBST(TreeNode* root) {
        pre = 0;
        traversal(root);
        return root;
    }
};

个人想法:

终于完结二叉树了,但只是完结而已,并没有掌握的有多深,等二刷。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_70280303/article/details/128051866

【leetcode_总结】538. 把二叉搜索树转换为累加树 - python_maka_uir的博客-爱代码爱编程

Q: 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 输入: 二叉搜索树: 5 / \ 2 13 输出: 转换为累加树:

leetcode-538. 把二叉搜索树转换为累加树_章小幽的博客-爱代码爱编程_把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 输入: 二叉搜索树: 5 / \ 2 13 输出:

538. 把二叉搜索树转换为累加树*【力扣】-爱代码爱编程

题意理解 更新二叉搜索树的每个结点为原来的节点值加上所有大于它的节点值的和。 问题分析 二叉树 深度遍历 其他 链接 TreeNode* convertBST(TreeNode* root) { int sum = 0; helper(root, sum); //辅助函数 retu

Leetcode 538. 把二叉搜索树转换为累加树-爱代码爱编程

Leetcode 538. 把二叉搜索树转换为累加树 1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/convert-bst-to-greater-tree/   本质上就是一个二叉树的遍历问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不

Leetcode 538. 把二叉搜索树转换为累加树 C++-爱代码爱编程

Leetcode 538. 把二叉搜索树转换为累加树 题目 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 测试样例: 输入: 原始二叉搜索树: 5 / \

1038. 把二叉搜索树转换为累加树-爱代码爱编程

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nu

Leetcode--Java--538. 把二叉搜索树转换为累加树-爱代码爱编程

题目描述 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须是二叉搜索树

【二叉树】538. 把二叉搜索树转换为累加树-爱代码爱编程

题目: 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须是二叉搜索树。

538. 把二叉搜索树转换为累加树-爱代码爱编程

题目描述: 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须

538.把二叉搜索树转换为累加树-爱代码爱编程

538.把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左

day32——二叉树专题_qgchun.的博客-爱代码爱编程

文章目录 28.删除二叉搜索树的节点29.修剪二叉搜索树30.将有序数组转换为二叉搜索树31. 把二叉搜索树转换为累加树 28.删除二叉搜索树的节点 题目链接:450. 删除二叉搜索树中

leetcode刷题2:链表篇_二进制研究员的博客-爱代码爱编程

提示:本篇共7道力扣题目供大家食用,时间自行把控~ 算法刷题系列笔记 LeetCode刷题1:数组篇 文章目录 算法刷题系列笔记作者有话说一、链表知识1.1 什么是链表?1.2 链表的类型1.3 链表操作

my seventy-first page - 目标和 - by nicolas_奋勇向上的小尼的博客-爱代码爱编程

这篇page是针对leetcode上的494.目标和所写的。小尼先简单的说明一下这道题的意思,就是给出一个整数数组nums和一个整数target,需要向数组中的每个整数前添加'+'或者'-',然后串联起所有整数,可以构造一个表达式,返回可以通过上述方法构造的、运算结果等于target的不同表达式的数目。 首先呢小尼先简单的说明一下这道题的解题思路,我们不

刷题看力扣,刷了两个月 leetcode 算法,顺利拿下百度、阿里等大厂的 offer_java程序v的博客-爱代码爱编程

随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目。刷题的网址非常的多,其中以 leetcode 是最为出名的。 在刷题上,我花了大量的时间,蹚了许多的坑,总结了一下,主要有这三个问题:

代码随想录算法训练营第四十四天| leetcode518. 零钱兑换 ii、leetcode377. 组合总和 Ⅳ_喵的博客-爱代码爱编程

一、LeetCode518. 零钱兑换 II         1:题目描述(518. 零钱兑换 II)         给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。         请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。         假设每一种面额的

leetcode hot 100 —— 23.合并k个升序链表_hdu-五七小卡的博客-爱代码爱编程

题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 思路 在做本题之前,先考虑一下,如何合并两个有序链表,见 21.合并两个有序链表 最直接的思路就是,用一

leetcode栈和队列练习-爱代码爱编程

文章目录 前言1.力扣20. 有效的括号1.题目分析 2.代码示现2.力扣225. 用队列实现栈1.题目分析2.代码实现 3.力扣232. 用栈实现队列1.题目分析2.代码实现 4.力扣622

【leetcode与《代码随想录》】哈希表篇:做题笔记与总结-爱代码爱编程

文章目录 代码随想录主要题目242. 有效的字母异位词349. 两个数组的交集202. 快乐数1. 两数之和(经典哈希)454. 四数相加 II15. 三数之和(双指针)18. 四数之和(双指针) 相关