当前位置: 首页 > 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;
    }
};

相关文章:

  • 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
  • 浙江演艺集团7部作品组团来沪,今夏开启首届上海演出季
  • 陕西三原高新区违法占用土地,被自然资源局罚款10万元
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 自然资源部:不动产登记累计化解遗留问题房屋2000多万套
  • 1至4月全国铁路发送旅客14.6亿人次,创同期历史新高
  • 透视社会组织创新实践中的花开岭现象:与乡村发展的融合共进