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