力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树

题目来源:

538:https://leetcode.cn/problems/convert-bst-to-greater-tree/description/

1038: https://leetcode.cn/problems/binary-search-tree-to-greater-sum-tree/description/

力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树_第1张图片

 力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树_第2张图片

 力扣 538. 把二叉搜索树转换为累加树 1038. 从二叉搜索树到更大和树_第3张图片

C++题解1:递归法。二叉搜索树由大到小,只要将中序遍历左中右变成右中左即可。

class Solution {
public:
    void traversal(TreeNode*& node, int& sum) {
        if(!node) return;
        traversal(node->right, sum);
        sum = sum + node->val;
        node->val = sum;
        traversal(node->left, sum);
        return;
    }
    TreeNode* convertBST(TreeNode* root) {
        int sum = 0;
        traversal(root, sum);
        return root;
    }
};

C++题解2:迭代法。

class Solution {
public:
    TreeNode* bstToGst(TreeNode* root) {
        stack st;
        TreeNode* cur = root;
        int sum = 0;
        while(cur || !st.empty()) {
            if(cur) {
                st.push(cur);
                cur = cur->right;
            }
            else {
                cur = st.top();
                st.pop();
                sum = sum + cur->val;
                cur->val = sum;
                cur = cur->left;
            }
        }
        return root;
    }
};

你可能感兴趣的:(开始C++吧,leetcode,算法,c++,二叉树,数据结构)