二叉搜索树——538. 把二叉搜索树转换为累加树
二叉搜索树——538. 把二叉搜索树转换为累加树
题目:

思路:
刚开始看了好几遍都没读懂题,后来终于明白了,就比如求第6个结点的新val,首先找到大于等于6的值即6、7、8,所以第6个结点的新val = 6+7+8 = 21。
上面就是二叉搜索树变为累加树的规则,至于解题思路还是老样子:对结点的操作是啥,遍历顺序是啥。
对于结点的操作就是找比他大的累加,但是找这个过程太麻烦了,不要忘记二叉搜索树的重要性质—中序遍历是升序,所以人家已经排列好了,不用你去找,负责累加就好。但是他是升序啊,我是找比我大的累加,那肯定是降序方便啊,所以我要把他变为降序的,变为降序也非常容易,只要把递归顺序改一下,现在的是左中右,改为右中左就变为降序了。好了现在遍历顺序和怎么操作都有了,就干吧。
代码:
class Solution {
public:
TreeNode* convertBST(TreeNode* root) {
if(root == NULL){
return root;
}
// 记录累加和
int sum = 0;
inorder(root,sum);
return root;
}
void inorder(TreeNode* root, int& sum){
if(root == NULL){
return ;
}
/**降序的中序遍历**/
inorder(root->right,sum); // 右
// 更新累加和
sum += root -> val;
// 将BST转换为累加树
root -> val = sum;
inorder(root->left,sum); // 左
}
};
Rank:

Tips:
太菜了,没想出来好的内存优化,不过也有的时候会达到80%多,不懂,rookie。

浙公网安备 33010602011771号