Leetcode-1038-把二叉搜索树转换为累加树
思路:反向中序遍历
题目描述
- 给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换成累加树(Greater Sum Tree),使得每个节点的
node
的新值等于原书中大于等于node.val
的值之和。
提醒一下,二叉搜索树满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
示例 1:
1 | 示例 2: |
方法 : 反向中序遍历
- 关于二叉搜索树的问题,第一个想到的就是中序遍历,这是二叉搜索树的一个非常重要的性质
- 二叉搜索树的中序遍历是一个递增的有序序列
观察累加前中序遍历和累加后中序遍历,我们会发现,其实后者就是前者的一个从后的累加结果。
那么问题就迎刃而解了,我们秩序反向中序遍历即可,并且把每次的节点值进行累加,就能得到最终的累加树。并且保证了这样只会访问每个节点一次。
1 | /** |
打赏