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

算法-二叉树篇27-把二叉搜索树转换为累加树

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

力扣题目链接

题目描述

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。

提醒一下,二叉搜索树满足下列约束条件:

节点的左子树仅包含键 小于 节点键的节点。
节点的右子树仅包含键 大于 节点键的节点。
左右子树也必须是二叉搜索树。

解题思路

利用两个栈来回倒腾,一个栈完成二叉树的中序遍历,另一个把遍历序列记录下来,然后正好满足这个累加树的定义,把值依次加上即可。

题解

class Solution {
public:
    TreeNode* convertBST(TreeNode* root) {
        if (!root) {
            return nullptr;
        }

        stack<TreeNode*> st;
        TreeNode* cur = root;
        stack<TreeNode*> s;
        while (!st.empty() || cur != nullptr) {
            if (cur != nullptr) {
                st.push(cur);
                cur = cur->left;
            } else {
                cur = st.top();
                st.pop();
                s.push(cur);
                cur = cur->right;
            }
        }

        int num = 0;
        while (!s.empty()) {
            cur = s.top();
            s.pop();
            cur->val += num;
            num = cur->val;
        }

        return root;
    }
};
http://www.dtcms.com/a/47275.html

相关文章:

  • el-input实现金额输入
  • TaskBuilder查看和预览客户信息列表页面
  • smolagents学习笔记系列(九)Examples - Orchestrate a multi-agent system
  • 15. C++多线程编程-网络编程-GUI编程(如Qt)学习建议
  • Linux安装jdk,node,mysql,redis
  • 最佳Nginx日志分割
  • InterHand26M(handposeX-json 格式)数据集-release >> DataBall
  • DAV_postgresql_3-schema
  • 初识MySQL · 数据库
  • 大白话Webpack 怎么理解,怎么使用它?
  • c++ 文件及基本读写总结
  • LM studio 加载ollama的模型
  • 【二分答案 C/C++】洛谷P1182 数列分段 Section II
  • 深度学习-15.生成对抗网络
  • 大语言模型学习
  • 图像算法工程师的技术图谱和学习路径
  • 从头开始学SpringBoot—02ssmp整合及案例
  • leetcode 48. 旋转图像
  • 《白帽子讲 Web 安全》之移动 Web 安全
  • SpringCloud系列教程(八):服务网关Gateway
  • 基于JavaWeb开发的Java+SpringBoot+vue+element实现物流管理系统
  • 基于Leaflet和SpringBoot的全球国家综合检索WebGIS可视化
  • python多线程之Event机制笔记
  • Hutool - JWT:轻松玩转 JSON Web Token
  • 基于springboot+vue实现的宠物救助及领养平台(源码+L文+ppt)43-21
  • C++ 标准库容器的常用成员函数
  • 【语法】C++中string类中的两个问题及解答
  • 计算机毕业设计SpringBoot+Vue.js音乐网站(源码+文档+PPT+讲解)
  • 【Leetcode 每日一题】132. 分割回文串 II
  • Linux篇——工具