leetcode 算法题538 (简单136) 把二叉搜索树转换为累加树
- 题目介绍
给定一个二叉搜索树(Binary Search Tree),
把它转换成为累加树(Greater Tree),
使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
- 示例
输入: 二叉搜索树:
5 / \ 2 13
输出: 转换为累加树:
18 / \ 20 13
- 解法一
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var convertBST = function(root) {
convert(root, 0);
return root;
};
const convert = (root, preVal) => {
if (!root) {
return null
}
if (root.right) {
preVal = convert(root.right, preVal)
}
root.val += preVal;
preVal = root.val;
if (root.left) {
preVal = convert(root.left, preVal)
}
return preVal;
}
执行用时 : 100 ms, 在所有 JavaScript 提交中击败了99.18%的用户
内存消耗 : 40.1 MB, 在所有 JavaScript 提交中击败了48.28%的用户
- 解法二
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var convertBST = function(root) {
convert(root, 0);
return root;
};
const convert = (root, preVal) => {
if (!root) {
return null
}
if (root.right) {
preVal = convert(root.right, preVal)
}
root.val += preVal;
preVal = root.val;
if (root.left) {
preVal = convert(root.left, preVal)
}
return preVal;
}
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var convertBST = function(root) {
let temp = [], i = 0;
addTree2Array(root, temp);
while(i < temp.length - 1) {
temp[i + 1].val = temp[i].val + temp[++i].val;
}
return root;
};
const addTree2Array = (node, temp) => {
if (!node) {
return;
}
if (node.right) {
addTree2Array(node.right, temp);
}
temp.push(node);
if (node.left) {
addTree2Array(node.left, temp);
}
}
执行用时 : 92 ms, 在所有 JavaScript 提交中击败了99.18%的用户
内存消耗 : 40.7 MB, 在所有 JavaScript 提交中击败了10.34%的用户