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

本文介绍了一种将二叉搜索树转换为累加树的方法,通过逆中序深度优先遍历,实现递归和迭代两种方式。递归法通过修改节点值并累计总和完成转换,迭代法则利用栈进行节点操作,最终达到相同效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

538. 把二叉搜索树转换为累加树
1038. 把二叉搜索树转换为累加树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解:逆中序深度优先遍历

1. 题解一:递归法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 题解二:迭代法

在这里插入图片描述

代码:逆中序深度优先遍历

1. 代码一:递归法

public class code538 {

    // 方法1: 递归法
    public int sum = 0;
    public TreeNode convertBST(TreeNode root)
    {
        if(root == null)
        {
            return null;
        }
        convertBST(root.right);
        sum = sum + root.val;
        root.val = sum;
        convertBST(root.left);

        return root;
    }

    public static void main(String[] args) {
        Integer nums[] = { 5, 2, 13 };
        TreeNode root = ConstructTree.constructTree(nums);
        TreeOperation.show(root);

        System.out.println("***************************************");

        code538 test = new code538();
        TreeNode res = test.convertBST(root);
        TreeOperation.show(res);
    }
}

2. 代码二:迭代法

import java.util.*;

public class code538 {

    // 方法2: 迭代法
    public TreeNode convertBST(TreeNode root)
    {
        int sum = 0;
        TreeNode node = root;
        Stack<TreeNode> stack = new Stack<TreeNode>();

        while(!stack.isEmpty() || node != null)
        {
            while(node != null)
            {
                stack.push(node);
                node = node.right;
            }

            node = stack.pop();
            sum = sum + node.val;
            node.val = sum;

            node = node.left;
        }

        return root;
    }    

    public static void main(String[] args) {
        Integer nums[] = { 5, 2, 13 };
        TreeNode root = ConstructTree.constructTree(nums);
        TreeOperation.show(root);

        System.out.println("***************************************");

        code538 test = new code538();
        TreeNode res = test.convertBST(root);
        TreeOperation.show(res);
    }
}

参考:

  1. 把二叉搜索树转换为累加树
  2. 一套拳法👊刷掉n个遍历树的问题
  3. 538. 把二叉搜索树转换为累加树(反向中序遍历)
  4. 求被更简洁超越【时间击败100.00%】 【内存击败96.46%】
  5. 【Java】dfs逆中序递归遍历,简洁,击败95%
  6. 模拟系统栈迭代DFS实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev_zyx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值