一、题目解析
给定一个搜索二叉树,然后将该搜索树的每一个节点Node[i]进行转换,其中具体转换规则为每一个节点的新值等于该二叉搜索树中所有比他大的节点值与其本身值的和,依次将该二叉树的每一个节点值按照以上规则进行重新计算,输出新二叉树的根节点,详情举例如下:
Input: The root of a Binary Search Tree like this: 5 / \ 2 13 Output: The root of a Greater Tree like this: 18 / \ 20 13二、思路解析
搜索二叉树有着非常明显的特点,即右节点值大于根节点值大于左节点值,由于每个节点的新值为所有大于节点值与其本身的节点值和,因此遍历顺序依次为右节点、根节点、左节点。计算过程在根节点处进行,设置一个变量temp,该变量存储当前节点之前所有遍历节点的和,具体算法实现如下。
三、代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* convertBST(TreeNode* root) {
travel(root);
return root;
}
TreeNode* travel(TreeNode* root) {
if(!root) {
return 0;
}
if(root->right) {
travel(root->right);
}
temp += root->val;
root->val = temp;
if(root->left) {
travel(root->left);
}
return root;
}
private:
int temp = 0;
};

本文介绍了一种针对二叉搜索树的转换算法,通过特定的遍历方式更新每个节点的值,使其等于所有大于该节点值的节点之和。详细解析了算法的思路,并给出了C++代码实现。
1120

被折叠的 条评论
为什么被折叠?



