今日算法之_156_把二叉搜索树转换为累加树
前言
Github:https://github.com/HealerJean
1、把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
输入: 原始二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
1.1、解题思路
只需要反序中序遍历该二叉搜索树,记录过程中的节点值之和,并不断更新当前遍历到的节点的节点值,即可得到题目要求的累加树
1.2、算法
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if (root != null) {
//找到最大的值
convertBST(root.right);
sum += root.val;
root.val = sum;
//开始走做节点了
convertBST(root.left);
}
return root;
}
1.3、测试
@Test
public void test(){
System.out.println(convertBST(initTreeNode()));
}