[538 Convert BST to Greater Tree]搜索二叉树的数值计算

一、题目解析

给定一个搜索二叉树,然后将该搜索树的每一个节点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;
};


你可能感兴趣的:(算法,深度优先搜索,二叉树遍历)