leetcode 538.把二叉搜索树转换为累加树 golang实现

描述
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

例如:

输入: 二叉搜索树:
              5
            /   \
           2     13

输出: 转换为累加树:
             18
            /   \
          20     13
思路
我们知道 二叉搜索树 中序遍历时从小到大的顺序 那么将 中序遍历时的左右打印顺序互换, 则变成从大到小顺序 此时我们只需要记录一个add值 累计即可
比如:
13 5 2
cur = 13 时 add = 0 则 cur = cur + add  cur = 13  add 变成 0 + 13 = 13
cur = 5 时 add = 13 则 cru = cur + add  cur = 18  add 变成 13 + 5 = 18
cur = 2 时 add = 18 则 cru = cur + add  cur = 20  add 变成 18 + 2 = 20
实现
func ConvertBST(root *TreeNode) *TreeNode {
	stack := make([]*TreeNode, 0)
	add := 0

	curNode := root

	for curNode != nil || len(stack) > 0 {
		for curNode != nil {
			stack = append(stack, curNode)
			curNode = curNode.Right
		}

		top := stack[len(stack)-1]
		stack = stack[0 : len(stack)-1]
		curNode = top.Left
		topVal := top.Val
		top.Val += add
		add += topVal
	}

	return root
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值