二叉搜索树包含以下约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
可以知道使用中序遍历可以快速的输出从小到大的有序序列。
累加树是使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
二者的关系就是中序遍历二叉搜索树然后从最后一个数字开始往前遍历累加,即可得出结论。
如果用代码实现可以使用中序遍历先访问右节点,再访问左节点即可达到从大到小访问,依次累加即可。
int sum = 0;
TreeNode* convertBST(TreeNode* root) {
midSearch(root);
return root;
}
void midSearch(TreeNode* root)
{
if(root != NULL)
{
midSearch(root->right);
root->val += sum;
sum = root->val;
midSearch(root->left);
}
}