大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn
538. 把二叉搜索树转换为累加树
题目描述
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如
输入: 原始二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
注意
本题和 1038: https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree/ 相同
分析
忽略二叉搜索树条件
先把每个节点的值加入到列表中,然后再进行递归,循环添加大于该节点的值
public List<Integer> lists = new ArrayList<>();
public TreeNode convertBST(TreeNode root) {
dfs(root);
Collections.sort(lists);
add(root);
return root;
}
public void add(TreeNode root) {
if (root == null)
return;
int tmp = 0;
for (int i = 0; i < lists.size(); i++) {
if (root.val < lists.get(i))
tmp += lists.get(i);
}
root.val += tmp;
add(root.left);
add(root.right);
}
public void dfs(TreeNode root) {
if (root == null)
return;
lists.add(root.val);
dfs(root.left);
dfs(root.right);
}
利用搜索树条件
本题中要求我们将每个节点的值修改为原来的节点值加上所有大于它的节点值之和。这样我们只需要反序中序遍历该二叉搜索树,记录过程中的节点值之和,并不断更新当前遍历到的节点的节点值,即可得到题目要求的累加树。
class Solution {
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;
}
}
提交结果
2020年9月21日更
大家觉得写还可以,可以点赞、收藏、关注一下吧!
也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn