题目:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
二叉树是BST,那么root的右边都比root大,累加右边所有节点的和就行,
遍历方向是: 右->中->左 (反向中序遍历)
但是注意的是,如果sum不是全局变量,而是作为helper的参数,在 helper(xx, sum) 递归之后,sum += root.val的sum还是0,没有在上面递归里面得到更新。
int sum = 0;
public TreeNode convertBST(TreeNode root) {
helper(root);
return root;
}
void helper(TreeNode root) {
if (root == null) return ;
helper(root.right);
//sum += root.val;
//root.val = sum;
root.val = (sum += root.val);//可以代替上面两行
helper(root.left);
}
版权声明:本文为qq_43778308原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。