leetcode 538.把二叉搜索树转换为累加树

leetcode 538.把二叉搜索树转换为累加树

原题传送门

题目描述

把二叉搜索树转换为累加树-2020-09-22-14-29-37

题解

这是一个BST, 我们中序遍历的话,就是从小到大排序。中序遍历情况是,左子树,父节点,右子树。这样的遍历顺序。如果我们从 大到小排序呢,我们就可以,按照 右子树, 父亲节点,左子树。的顺序遍历,这样的遍历顺序我们可以保证我们是从大 到小的顺序的顺序遍历的
为什么要从小到大遍历呢?
这是累加树,只会该节点只会加上大于该节点的值的和。如果我们从 大到小我们每个节点只需要遍历一遍就行了。记录遍历过节点的值的总和 在加上当前节点的值,就是这个节点的值。
之所以没有写递归程序 是因为能够一个函数解决的问题,我就尽量不写两个。

代码

class Solution {
public:

    // 中序遍历, 从小到大  排序。 左 中 右边。
    // 从大 到小 排序。 则是, 右 中 左 遍历

    TreeNode* convertBST(TreeNode* root) {
        if (!root) return NULL;

        stack<TreeNode *> st; // 栈模拟递归。
        TreeNode * tmp = root;
        int sum = 0;
        while ( !st.empty() || tmp)
        {
            while (tmp){
                st.push(tmp);
                tmp = tmp->right;
            }

            TreeNode * t = st.top();
            st.pop();

            sum += t->val; // 记录遍历过节点的 总和。
            t->val = sum;

            tmp = t->left;
        }

        return root;
    }
};

喜欢的话,给博主赏一杯冰阔乐吧


 上一篇
数组的度 数组的度
leetcode 697.数组的度题目: 传送门 一看题很水就想直接暴力。哎~ 我错了。 开始想着排序。找到最大的度对应的值,然后双指针从两边开始搜。找到相应的值左右两边相减就能得到答案了。 太天真了。其实最大度对应的值可能不止一对。当发现
2020-09-28
下一篇 
leetcode 299.猜数字游戏 leetcode 299.猜数字游戏
最近做了好多字母桶的,记录一下这个题。不是很想用哈希。
2020-09-15
  目录