LeetCode 1028. 从先序遍历还原二叉树 递归

参考:https://www.cnblogs.com/grandyang/p/11149132.html

”这里我们需要一个全局变量 cur,表示当前遍历字符串S的位置,递归函数还要传递个当前的深度 level。在递归函数中,首先还是要提取短杠的个数,但是这里有个很 tricky 的地方,我们在统计短杠个数的时候,不能更新 cur,因为 cur 是个全局变量,当统计出来的短杠个数跟当前的深度不相同,就不能再继续处理了,如果此时更新了 cur,而没有正确的复原的话,就会出错。博主成功入坑,检查了好久才找出原因。当短杠个数跟当前深度相同时,我们继续提取出结点值,然后新建出结点,对下一层分别调用递归函数赋给新建结点的左右子结点,最后返回该新建结点即可“

 /**
 * 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:
    int cur;//global variable
    TreeNode* recover(string S, int &cur, int level){
        int cnt = 0, n = S.size();
        while(cur+cntleft = recover(S, cur, level+1);
        res->right = recover(S, cur, level+1);
        return res;
    }
    TreeNode* recoverFromPreorder(string S) {
        cur = 0;
        return recover(S, cur, 0);
    }
};

 

你可能感兴趣的:(搜索算法)