题目:
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20 13
解题思路:
优先访问右节点的中序遍历,计算经过节点的总和并且更新当前节点的值。
代码实现:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private int sum = 0; public TreeNode convertBST(TreeNode root) { convert(root); return root; } private void convert(TreeNode p) { if (p == null) return; convert(p.right); sum += p.val; p.val = sum; convert(p.left); } }