当前位置: 首页 > article >正文

力扣(LeetCode)1038. 从二叉搜索树到更大和树(C++)

先序遍历

根据题意,给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。模拟二叉搜索树替换到更大和数的过程,

请了解性质:二叉搜索树的先序遍历,是一个正序数组
直观思路,先序遍历(左根右)得到正序数组,再反向先序遍历(右根左)二叉搜索树,根据正序数组倒着累加在树上。

请思考:反向先序遍历(右根左)二叉搜索树的结果,正是二叉搜索树的逆序数组,提示我们可以直接反向先序遍历遍历二叉搜索树,同时累加。

提示:累加的过程,是对二叉搜索树的逆序数组,做前缀和。

class Solution {
private:
    int sum = 0;
public:
    TreeNode* bstToGst(TreeNode* root) {
        preOrderTraverse(root);
        return root;
    }
    void preOrderTraverse(TreeNode *t_node) {
        if (!t_node) return ;
        if (t_node -> right) preOrderTraverse(t_node->right);
        sum += t_node->val;
        t_node->val = sum;
        if (t_node -> left) preOrderTraverse(t_node->left);
    }
};

时间复杂度 O ( n ) O(n) O(n):反向先序遍历的时间复杂度 O ( n ) O(n) O(n)
空间复杂度 O ( n ) O(n) O(n):最坏空间复杂度 O ( n ) O(n) O(n)

致语
  • 欢迎读者在评论区留言,期待和大家交流做题感想,分享算法经验~

http://www.kler.cn/news/163311.html

相关文章:

  • 卷积之后通道数为什么变了
  • java实现冒泡排序算法
  • 做题笔记:SQL Sever 方式做牛客SQL的题目--SQL156
  • 什么是Nginx反向代理?Nginx反向代理配置指南
  • Centos图形化界面封装OpenStack Centos镜像
  • Kubernetes(K8s)数据存储-09
  • c/c++中一些不常用但有用的知识
  • 【数据结构】插入排序,希尔排序,选择排序,堆排序,冒泡排序
  • 限流算法,基于go的gRPC 实现的
  • 阿里云磁盘在线扩容
  • 生信技能30 - 获取CNV开始位置和结束位置所在的染色体区带
  • L1-028:判断素数
  • JavaScript常用技巧专题一
  • Flink流批一体计算(23):Flink SQL之多流kafka写入多个mysql sink
  • 达梦数据库dm8守护集群部署手册
  • 浅谈Elastic Stack组件集成和应用
  • (时域和频域)控制系统响应速度和稳定性分析
  • 三种定时任务总结
  • C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件
  • 【51单片机系列】74HC595实现对LED点阵的控制
  • JS中的闭包
  • 做数据分析为何要学统计学(5)——什么问题适合使用t检验?
  • C语言 - 字符函数和字符串函数
  • 【vSphere | VM】虚拟机自定义规范Ⅲ —— 创建 Linux 虚拟机自定义规范
  • mongdb配置ssl
  • 用Python实现十大经典排序算法(附动图)
  • 周赛374(枚举、思维题、分组循环+枚举、组合数学)
  • Docker网络原理及Cgroup硬件资源占用控制
  • Apollo新版本Beta自动驾驶技术沙龙参会体验有感—百度自动驾驶开源框架
  • 电脑软件:TileIconifier开始菜单美化工具介绍