【leetcode 968. 1028. 从先序遍历还原二叉树】解题报告[待完善...]
2024-09-05 10:15:16
思路:用一个栈来管理树的层次关系,索引代表节点的深度
方法一:
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[];
}
最新文章
- centos7安装svn1.8.16
- dubbo的安装和使用
- 解决vsftpd日志时间问题
- c/c++面试总结(2)
- Android BroadcasetReceiver
- 中文Win7下成功安装calabash-android步骤
- 不只是打车软件,中国车主们赋予了Uber更多意义
- EF 命令
- centos6.5 搭建nginx1.6.0 +gridfs +mongodb2.4..10环境
- C#基础1:Console类
- springMVC拦截器简单配置
- 推荐学习C#的地方
- 如何开发基于Dubbo RPC的分布式服务?
- [C#].Net Core 获取 HttpContext.Current 以及 AsyncLocal 与 ThreadLocal
- MacPro4,1升级到MacPro5,1
- iOS开发基础-九宫格坐标(1)
- Ex 2_4 假定您需要在以下三种算法中作出抉择..._第三次作业
- easyUI详解
- 在Python中定义和使用抽象类的方法
- css 使元素居中