当前位置: 首页 > 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/a/163311.html

相关文章:

  • 基于matlab的CNN食物识别分类系统,matlab深度学习分类,训练+数据集+界面
  • Python 小高考篇(2)字符串
  • 【PGCCC】Postgresql Toast 原理
  • 2024年11月10日系统架构设计师考试题目回顾
  • KubeVirt入门介绍
  • 前端入门一之ES6--面向对象、够着函数和原型、继承、ES5新增方法、函数进阶、严格模式、高阶函数、闭包
  • 卷积之后通道数为什么变了
  • 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点阵的控制