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

方法一:

    TreeNode* recoverFromPreorder(string S) {
/*
由题意知,最上层节点深度为0(数字前面0条横线),而第二层节点前有1条横线,表示深度为1
树的前序遍历: 根-左-右
因此,
*/
if (S.empty()) return nullptr;
vector<TreeNode*> stack; // 结果栈
for(int i=,depth=,val=;i<S.size();)
{
for(depth=;i<S.size()&&S[i]=='-';++i) // 计算节点的深度
depth++;
for(val=;i<S.size()&&S[i]!='-';++i) // 计算数值
val=val*+S[i]-'';
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[];
}

最新文章

  1. centos7安装svn1.8.16
  2. dubbo的安装和使用
  3. 解决vsftpd日志时间问题
  4. c/c++面试总结(2)
  5. Android BroadcasetReceiver
  6. 中文Win7下成功安装calabash-android步骤
  7. 不只是打车软件,中国车主们赋予了Uber更多意义
  8. EF 命令
  9. centos6.5 搭建nginx1.6.0 +gridfs +mongodb2.4..10环境
  10. C#基础1:Console类
  11. springMVC拦截器简单配置
  12. 推荐学习C#的地方
  13. 如何开发基于Dubbo RPC的分布式服务?
  14. [C#].Net Core 获取 HttpContext.Current 以及 AsyncLocal 与 ThreadLocal
  15. MacPro4,1升级到MacPro5,1
  16. iOS开发基础-九宫格坐标(1)
  17. Ex 2_4 假定您需要在以下三种算法中作出抉择..._第三次作业
  18. easyUI详解
  19. 在Python中定义和使用抽象类的方法
  20. css 使元素居中

热门文章

  1. Spark- Transformation实战
  2. Javascript函数的参数arguments
  3. Python基础之元组操作
  4. leetcode 3 Longest Substring Without Repeating Characters(滑动窗口)
  5. C++中抽象类和多继承
  6. bzoj 2118: 墨墨的等式 spfa
  7. 逐步改用 IronPython 开发你的 ASP.NET 应用程序
  8. Otter入门简介
  9. nginx用cookie控制访问权限实现方法
  10. 关于 vs 2012 键盘无法输入的问题