首页 > 其他分享 >33_把二叉搜索树转换为累加树

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

时间:2024-01-24 21:38:04浏览次数:24  
标签:二叉 curr 33 累加 TreeNode null root stack 节点

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

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

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

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

注意:本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同

示例 1:

img

输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

示例 2:

输入:root = [0,null,1]
输出:[1,null,1]

示例 3:

输入:root = [1,0,2]
输出:[3,3,2]

示例 4:

输入:root = [3,2,4,1]
输出:[7,9,4,10]

递归法

class Solution {
   int sum = 0;
   public TreeNode convertBST(TreeNode root) {
       convertBST1(root);
       return root;
   }
   // 按右中左顺序遍历,累加即可
   public void convertBST1(TreeNode root) {
       if (root == null)
           return;
       convertBST(root.right);
       sum += root.val;
       root.val = sum;
       convertBST(root.left);
   }
}
//leetcode submit region end(Prohibit modification and deletion)

迭代法

class Solution {
    //DFS iteration统一迭代法
    public TreeNode convertBST(TreeNode root) {
        int pre = 0;
        Stack<TreeNode> stack = new Stack<>();
        if (root == null) 
            return null;
        stack.add(root);
        while (!stack.isEmpty()) {
            TreeNode curr = stack.peek();
            //curr!=null的情况,只负责存node到stack中
            if (curr != null) {
                stack.pop();
                if (curr.left != null)  //左
                    stack.add(curr.left);
                stack.add(curr); //中
                stack.add(null);
               if(curr.right != null)      //右
                    stack.add(curr.right);
            }else{
            //curr == null的状况,只负责做单层逻辑
                stack.pop();
                TreeNode temp = stack.pop();
                temp.val += pre;
                pre = temp.val;
            }
        }
        return root;
    }
}

标签:二叉,curr,33,累加,TreeNode,null,root,stack,节点
From: https://www.cnblogs.com/codingbao/p/17985867

相关文章

  • KY207 二叉排序树C++
    考二叉搜索树的插入。#include<iostream>usingnamespacestd;structnode{intdata;structnode*left;structnode*right;};typedefstructnodetree;intmain(){intn;while(cin>>n){tree*root=NULL;while(n!=0......
  • KY11 二叉树遍历C++
    这个题目思路其实就是先序遍历的变形。相当于沿着先序遍历的顺序跟着构建二叉树就行。然后中序遍历这个树。#include<iostream>#include<string>usingnamespacestd;structtnode{chardata;structtnode*left;structtnode*right;};typedefstructt......
  • KY212 二叉树遍历C++
    思路是先构造出树,然后在后序遍历整个树。#include<iostream>#include<string>usingnamespacestd;structTnode{chardata;structTnode*left;structTnode*right;};typedefstructTnodeTree;Tree*build(stringpre,inth1,intt1,stringin,inth2......
  • “哄女友挑战”上线即爆火,两天烧掉 10 亿 token,AI 已通关丨 RTE 开发者日报 Vol.133
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表......
  • 解决centos7修改网卡名为eth0仍显示ens33的问题
    1.进入/etc/sysconfig/network-scripts修改网卡配置文件中的DEVICE=与NAME=参数为eth0保存退出后再修改网卡配置文件名mvifcfg-ens33ifcfg-eth02.重新生成grub2文件编辑/etc/default/grub配置文件,在GRUB_CMDLINE_LINUX这个参数后面加入:net.ifnames=0biosdevnam......
  • 32_将有序数组转换为平衡二叉搜索树
    108、将有序数组转换为二叉搜索树给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul......
  • SQL构建表层次关系,递归累加数据
     构建表的上下级关系      有一个需求,表中数据没有关系,如同一个类型的,有多个出库时间。代码--构建表的上下级关系--可以对同一个产品的,有层次关系--使用ROW_NUMBER(),来构建,最上上一级为0INSERTINTOStock([no]--编号,[quantity]......
  • 二叉查找树
    二叉查找树是类似于一种堆的数据结构(没有重复元素)二叉查找有一个性质:中序遍历得到的就是关键码升序排列的序列这个结构支持很多的操作insert(intval):新增一个关键码为val的节点get(intval):查找关键码为val的节点getnext(intval):查找val的前驱(严格大于val的最小值,可能val......
  • oracle提示错误1033,ora-1033
    oracle提示错误1033,ora-1033制造问题和解决问题 文章标签:oracle提示错误1033系统是winxp,使用Imp导入数据到用户user1的时候,关闭了cmd窗口,结果在删除user1的时候,出现了ora-1033错误。解决办法:>connect/assysdba>shutdown>startupmount>alterdatabaserecoverdataba......
  • 算法学习Day41整数拆分、不同的二叉搜索树
    Day41整数拆分、不同的二叉搜索树ByHQWQF2024/01/22笔记343.整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例1:输入:2输出:1解释:2=1+1,1×1=1。示例 2:输入:10输出:36解释......