zoukankan      html  css  js  c++  java
  • 【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];
        }
  • 相关阅读:
    Third practice 3
    Third practice 2
    Third practice 1
    mock模拟get和post请求
    eslint语法检测报错解决办法
    python 入门到实践第四章案例
    python 入门到实践第三章课后练习
    python 入门到实践第三章
    axios拦截器的使用
    axios的实例和模块封装
  • 原文地址:https://www.cnblogs.com/brianyi/p/10804891.html
Copyright © 2011-2022 走看看