首先,要知道二叉搜索树。
简单来说就是每个节点的左子树的 val 都小于当前节点的 val ,每个右子树的 val 都大于当前节点的 val 。
累加树的定义题目已经给出,因为二叉搜索树本身中序遍历就是一个有序的序列,所以反向遍历每次把前一个的数累加到当前的数就是本身加上所有更大数之和。
简单的过程如下:
利用反中序遍历即可一次性完成所有节点的更新。代码如下:
public class lc538 {
int count=0;
public TreeNode convertBST(TreeNode root) {
if(root==null||(root.right==null&&root.left==null))return root;
bfs(root);
return root;
}
public void bfs(TreeNode node){
if(node.right!=null)bfs(node.right);
count = count + node.val;
node.val = count;
if(node.left!=null)bfs(node.left);
}
}
最后成功通过。