BST:关键是明白其的中序遍历的方式可以得到对应的序列的增序排列,实现的遍历代码如下:
vector<int>res;
void traverse(TreeNode *root, vector<int>&res)
{
if(!root) return;
traverse(root -> left, res);
res.push_back(root -> val);
traverse(root -> right, res);
}
上面的代码便可以完成对应的将二叉搜索树的序列的数据存储起来,这样是得到序列的增序结果!将上面代码修改为如下:则可以得到对应的降序的结果!
vector<int>res;
void traverse(TreeNode *root, vector<int>&res)
{
if(!root) return;
traverse(root -> right, res);
res.push_back(root -> val);
traverse(root -> left, res);
}
则上面的代码可以得到二叉树的降序序列,对应的二叉搜索树的求解对应的: 1038. 把二叉搜索树转换为累加树 的题目!便是使用上面的代码一边遍历一边将其中的sum的值进行求和赋值为新的节点的值!
原先的题目的大意为:538将二叉树搜索树转换为累加树
class Solution {
public:
TreeNode* bstToGst(TreeNode* root) {
traverse(root, res);
for(auto it = res.begin(); it != res.end(); it ++) {
cout << *it << endl;
}
return root;
}
int sum = 0;
vector<int>res;
void traverse(TreeNode* root, vector<int>&res)
{
if(root == nullptr) return;
traverse(root -> right, res);
sum += root -> val;
root -> val = sum;
res.push_back(sum);
traverse(root -> left, res);
}
};