538. Convert BST to Greater Tree

来源:互联网 发布:全职高手周边淘宝网 编辑:程序博客网 时间:2024/05/21 06:13

leetcode 538. Convert BST to Greater Tree

一. 这道题我想起了考研时候的二叉排序树的特点~即中序遍历是递增的

但是我又想,只知道中序的话是不能还原出原二叉树的。

然后又去想 递归,具体过程是 计算某个节点的val的时候,必须加他父亲节点还有他的右子树的和,但是当一个节点是他父亲节点的右侧节点时,还得去找父亲的父亲。。所以递归没有想出来。于是求助了答案。

二. 看了一个答案思想之后,顿时觉得自己很2。 我刚开始用中序遍历可以直接把节点放入vector啊。不用把节点的值放入vector。。。 这样用迭代器遍历就好了。还不会改变树的结构。。智障啊。。

 然后自己写了一下就AC了。

三.学习到的细节。在迭代器中end.()-1就是减了一个元素的地址,而不是就-1.

还有细节是end.()是指向最后一个元素的下一个位置。。之前一直懵逼。

四.

class Solution {
public:
    vector <TreeNode *> treelist;
    vector <TreeNode *> ::iterator it;
    TreeNode* convertBST(TreeNode* root)
    {
        
        if(root){   //这个if是为了输入null的时候用的
            gothrough(root);
            for(it=treelist.end()-2;it!=treelist.begin()-1;it--)  
                (*it)->val += (*(it+1))->val;
        }
        return root;
    }
    void gothrough(TreeNode *root)  //这步操作把所有树节点中序遍历的顺序加入到treelist里
    {
        if(!root)
            return ;
        gothrough(root->left);
        treelist.push_back(root);
        gothrough(root->right);
    }
};

0 0