欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java 求解如何把二叉搜索树转换为累加树

时间:2022-03-11 08:51:40|栏目:JAVA代码|点击:

一、题目

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

提醒一下,二叉搜索树满足下列约束条件:
节点的左子树仅包含键 小于 节点键的节点。
节点的右子树仅包含键 大于 节点键的节点。
左右子树也必须是二叉搜索树。

在这里插入图片描述

二、题解

观察示例图发现,树的遍历顺序为右,中,左的顺序,每个节点的值,是按照这个顺序累加的状态

在这里插入图片描述

由于是需要累加,所以需要pre指针记录当前遍历节点cur的前一个节点,方便累加

(1)确定递归函数及返回值

题目需要遍历整棵树,同时需要定义一个全局变量 pre,用来保存 cur节点的前一个节点的数值

(2)确定递归终止条件

遇到空就终止

(3)确定单层递归的逻辑

遍历的顺序,右,中,左

三、代码

class Solution {
    // 记录前驱节点
    int pre = 0;

    public TreeNode convertBST(TreeNode root) {
        // 空节点终止
        if (root == null) {
            return root;
        }
        // 遍历顺序:右,中,左
        convertBST(root.right);
        root.val += pre;
        pre = root.val;
        convertBST(root.left);
        return root;
    }
}

四、总结

观察示例节点的规律,需要记录上个节点的情况,注意引入前驱节点pre

上一篇:深入理解spring boot 监控

栏    目:JAVA代码

下一篇:通过Java视角简单谈谈局部性原理

本文标题:Java 求解如何把二叉搜索树转换为累加树

本文地址:http://www.codeinn.net/misctech/195868.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有