算法记录
LeetCode 题目:
给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
说明
一、题目
给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
二、分析
- 由于二叉搜索树自身的结构性质,先遍历右子树将会拿到整个树中的最大值。
- 在遍历的过程中进行一个和值的缓存,只要其右子树遍历完成就可以加上当前点的值然后进行根性当前点的值即可完成数据的更新。
class Solution {
private Integer max = 0;
public TreeNode convertBST(TreeNode root) {
dfs(root);
return root;
}
public void dfs(TreeNode root) {
if(root == null) return;
dfs(root.right);
max += root.val;
root.val = max;
dfs(root.left);
}
}
总结
熟悉二叉搜索树的性质和先右遍历。