题目
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
输入: 原始二叉搜索树:
5
/
2 13
输出: 转换为累加树:
18
/
20 13
思路
二叉搜索树,要想到中序遍历。写出最后的结果集合,每个数字的值就是后者所有的累加。因此就是反向中序遍历,并把每次的节点值进行累加。
代码
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if(root==null){
return null;
}
convertBST(root.right);
sum = sum+root.val;
root.val = sum;
convertBST(root.left);
return root;
}
版权声明:本文为qq_42215827原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。