Leetcode——538. Convert BST to Greater Tree
阿新 • • 發佈:2019-02-10
題目原址
題目描述
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.
Example:
Input: The root of a Binary Search Tree like this:
5
/ \
2 13
Output: The root of a Greater Tree like this:
18
/ \
20 13
給定一個BST二叉樹,將當前的節點的值變為當前節點+所有比當前節點的值大的值
解題思路
因為給定的樹是BST,所以可以知道如果採用後續遍歷的方式,第一個找到的節點應該是最大的節點。所以採用遞迴的方式從最大的節點開始改變樹的值
AC程式碼
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
post(root);
return root;
}
public void post(TreeNode root) {
// TODO Auto-generated method stub
//如果當前節點為null,則返回
if(root == null) return;
//找到樹的最右邊的節點
post(root.right);
//當前節點的值=比當前節點的值大的值之和+當前節點的值
root.val += sum;
//更改比下一個節點大的所有節點的值的和
sum = root.val;
//右子樹遍歷完,開始遍歷左子樹
post(root.left);
}
}