把二叉搜索树转换为累加树
2022/11/01
示例
示例一
输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
示例二
输入:root = [0,null,1]
输出:[1,null,1]
示例三
输入:root = [1,0,2]
输出:[3,3,2]
示例四
输入:root = [3,2,4,1]
输出:[7,9,4,10]
题解
dfs
var convertBST = function (root) {
  let sum = 0;
  const dfs = (node) => {
    if (node) {
      dfs(node.right);
      sum += node.val;
      node.val = sum;
      dfs(node.left);
    }
  };
  dfs(root);
  return root;
};
bfs
var getSuccessor = (node) => {
  let succ = node.right;
  while (succ.left && succ.left !== node) {
    succ = succ.left;
  }
  return succ
}
var convertBST = function (root) {
  let sum = 0;
  let node = root;
  while (node) {
    if (node.right) {
      const succ = getSuccessor(node)
      if (succ.left) {
        succ.left = null;
        sum += node.val;
        node.val = sum
        node = node.left;
      } else {
        succ.left = node;
        node = node.right;
      }
    } else {
      sum += node.val;
      node.val = sum;
      node = node.left;
    }
  }
  return root
};