类似于二叉树的中序遍历,只是首先访问右子树,另外在递归过程中,要传一个总的值记录当前已访问节点的和。
代码如下。
void set(struct TreeNode *node, int *val){
if(!node){
return;
}
set(node->right, val);
node->val += *val;
*val = node->val;
set(node->left, val);
}
struct TreeNode* bstToGst(struct TreeNode* root){
int val = 0;
set(root, &val);
return root;
}