问题描述:
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
思路:
由于二叉搜索数的中序遍历的结果是从小到大排列的结点值,利用这个特性,采用反向中序遍历,从大向小检查数字,每个结点的值都加上已经遍历过的结点值的和,即可。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int num = 0;
public TreeNode convertBST(TreeNode root) {
middle(root);
return root;
}
public void middle(TreeNode root){
if(root == null) return;
if(root.right != null)
middle(root.right);
root.val += num;
num = root.val;
if(root.left != null)
middle(root.left);
}
}