mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
update 0538.把二叉搜索树转换为累加树:替换 go 代码
This commit is contained in:
@ -45,11 +45,11 @@
|
||||
|
||||
# 思路
|
||||
|
||||
一看到累加树,相信很多小伙伴都会疑惑:如何累加?遇到一个节点,然后在遍历其他节点累加?怎么一想这么麻烦呢。
|
||||
一看到累加树,相信很多小伙伴都会疑惑:如何累加?遇到一个节点,然后再遍历其他节点累加?怎么一想这么麻烦呢。
|
||||
|
||||
然后再发现这是一棵二叉搜索树,二叉搜索树啊,这是有序的啊。
|
||||
|
||||
那么有序的元素如果求累加呢?
|
||||
那么有序的元素如何求累加呢?
|
||||
|
||||
**其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。**
|
||||
|
||||
@ -233,23 +233,23 @@ class Solution:
|
||||
## Go
|
||||
|
||||
弄一个sum暂存其和值
|
||||
|
||||
```go
|
||||
//右中左
|
||||
func bstToGst(root *TreeNode) *TreeNode {
|
||||
var sum int
|
||||
RightMLeft(root,&sum)
|
||||
return root
|
||||
}
|
||||
func RightMLeft(root *TreeNode,sum *int) *TreeNode {
|
||||
if root==nil{return nil}//终止条件,遇到空节点就返回
|
||||
RightMLeft(root.Right,sum)//先遍历右边
|
||||
temp:=*sum//暂存总和值
|
||||
*sum+=root.Val//将总和值变更
|
||||
root.Val+=temp//更新节点值
|
||||
RightMLeft(root.Left,sum)//遍历左节点
|
||||
var pre int
|
||||
func convertBST(root *TreeNode) *TreeNode {
|
||||
pre = 0
|
||||
traversal(root)
|
||||
return root
|
||||
}
|
||||
|
||||
func traversal(cur *TreeNode) {
|
||||
if cur == nil {
|
||||
return
|
||||
}
|
||||
traversal(cur.Right)
|
||||
cur.Val += pre
|
||||
pre = cur.Val
|
||||
traversal(cur.Left)
|
||||
}
|
||||
```
|
||||
|
||||
## JavaScript
|
||||
|
Reference in New Issue
Block a user