leetcode 968. 1028. 从先序遍历还原二叉树解题报告[待完善...]

Posted brianyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 968. 1028. 从先序遍历还原二叉树解题报告[待完善...]相关的知识,希望对你有一定的参考价值。

技术图片

思路:用一个栈来管理树的层次关系,索引代表节点的深度

方法一:

    TreeNode* recoverFromPreorder(string S) {
        /*
            由题意知,最上层节点深度为0(数字前面0条横线),而第二层节点前有1条横线,表示深度为1
            树的前序遍历: 根-左-右
            因此,
        */
        if (S.empty()) return nullptr;
        vector<TreeNode*> stack;  // 结果栈
        for(int i=0,depth=0,val=0;i<S.size();)
        {
            for(depth=0;i<S.size()&&S[i]==-;++i)  // 计算节点的深度
                depth++;
            for(val=0;i<S.size()&&S[i]!=-;++i)    // 计算数值
                val=val*10+S[i]-0;
            while (stack.size()>depth)    // 若当前栈的长度(树的高度)大于节点的深度,则可以把栈中最后几个节点pop掉(这些节点各已经成为完整的子树,可以pop掉了)
                stack.pop_back();
            TreeNode* node=new TreeNode(val);   // 新建节点用于存放当前深度的结点
            if (!stack.empty()) // 节点间关联
            {
                if (!stack.back()->left)      stack.back()->left=node;
                else if(!stack.back()->right) stack.back()->right=node;
            }
            stack.push_back(node);
        }
        return stack[0];
    }

 

以上是关于leetcode 968. 1028. 从先序遍历还原二叉树解题报告[待完善...]的主要内容,如果未能解决你的问题,请参考以下文章

leetcode——1028.从先序遍历还原二叉树

leetcode1028. 从先序遍历还原二叉树

leetcode1028. 从先序遍历还原二叉树

leetcode1028. 从先序遍历还原二叉树

leetcode 1028. 从先序遍历还原二叉树

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