LeetCode如何把二叉搜索树转换为累加树
一、什么是二叉搜索树
二叉搜索树(Binary Search Tree),又称二叉查找树或二叉排序树,它是一种特殊的二叉树,它具有以下性质:
- 1、若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
- 2、若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
- 3、任意节点的左、右子树也分别为二叉搜索树;
- 4、没有键值相等的节点。
二、什么是累加树
累加树(Binary Tree to Greater Sum Tree)是一种特殊的二叉树,它具有以下性质:
- 1、若任意节点的左子树不空,则根节点的值等于它的左子树上所有节点的值的累加和;
- 2、若任意节点的右子树不空,则根节点的值等于它的右子树上所有节点的值的累加和;
- 3、任意节点的左、右子树也分别为累加树;
- 4、没有键值相等的节点。
三、LeetCode如何把二叉搜索树转换为累加树
LeetCode提供了一种比较有效的方法来将二叉搜索树转换为累加树,这种方法的思想是:从树的最右节点开始,每个节点的值都是它的右子树上所有节点的值的累加和,然后再从树的最右节点开始,每个节点的值都是它的左子树上所有节点的值的累加和。
下面是LeetCode实现的一个示例代码:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var bstToGst = function(root) {
let sum = 0;
// 从右节点开始,每个节点的值都是它的右子树上所有节点的值的累加和
const traverse = (node) => {
if (node === null) return;
traverse(node.right);
sum += node.val;
node.val = sum;
traverse(node.left);
}
// 从右节点开始,每个节点的值都是它的左子树上所有节点的值的累加和
traverse(root);
return root;
};
以上代码实现了将二叉搜索树转换为累加树的功能,从右节点开始,每个节点的值都是它的右子树上所有节点的值的累加和,然后再从右节点开始,每个节点的值都是它的左子树上所有节点的值的累加和,最终实现了将二叉搜索树转换为累加树的目的。
上一篇
如何进行vue入门环境搭建及运行 下一篇
Netty零拷贝是什么意思 猜您想看
-
关于评分的秘诀,如何通过网易云音乐评分告诉别人什么是真正的音乐?
1、评分的重要...
2023年05月15日 -
如何在Windows上管理电源计划
如何在Wind...
2023年05月06日 -
如何下载与安装MedCalc软件
一、介绍Med...
2023年05月26日 -
查询linux系统版本提示bash:lsb_release:command not found错误的解决方法
问题描述:在使...
2023年07月22日 -
CSS数据类型和遍历赋值的方式
CSS数据类型...
2023年07月20日 -
spark源码阅读基本思路是什么
一、准备工作1...
2023年05月26日