首页 > 试题广场 >

将二叉搜索树改为累加树

[编程题]将二叉搜索树改为累加树
  • 热度指数:1137 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个二叉搜索树,树上的节点各不相同,请你将其修改为累加树,使每个节点的值变成原树中更大节点之和。

二叉搜索树的定义是任一节点的左子树的任意节点的值小于根节点的值,右子树则相反。

数据范围:树上节点数满足 ,节点上的值满足

样例图1:
样例图2:
示例1

输入

{0,#,1}

输出

{1,#,1}
示例2

输入

{1,0,2}

输出

{3,3,2}

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
package main
import _"fmt"
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return TreeNode类
*/

var sum int
func convertBST( root *TreeNode ) *TreeNode {
    arr:=order(root)
    for i,x:=range arr{
        ori:=x.Val
        arr[i].Val=sum
        sum-=ori
    }
    return root
}

func order(root *TreeNode)[]*TreeNode{
    if root==nil{
        return nil
    }
    ans:=[]*TreeNode{}
    sum+=root.Val
    ans=append(ans,order(root.Left)...)
    ans=append(ans,root)
    ans=append(ans,order(root.Right)...)
    return ans
}

发表于 2023-03-10 00:46:19 回复(0)