Construct Binary Tree from Preorder and Inorder Traversal
2016-05-08 18:21
411 查看
题目:从一棵树的前序和中序遍历结果构建一棵树。
前序遍历结果的第一个结点是树的根节点;在中序遍历结果中,根节点的左边是树的左子树,右边是树的右子树。然后再重新确定左子树和右子树的范围,递归寻找左子树和右子树的根节点。
这里需要注意的是递归终止条件:pre_start>pre_end.
前序遍历结果的第一个结点是树的根节点;在中序遍历结果中,根节点的左边是树的左子树,右边是树的右子树。然后再重新确定左子树和右子树的范围,递归寻找左子树和右子树的根节点。
TreeNode* buildSubTree(vector<int>& preorder,vector<int>& inorder,int pre_start,int pre_end,int in_start,int in_end){ if(pre_start>pre_end) return NULL; TreeNode* root=new TreeNode(preorder[pre_start]); int i=in_start; while(i<=in_end&&inorder[i]!=preorder[pre_start]) i++; int pos=i; int leftlength=pos-in_start; root->left=buildSubTree(preorder,inorder,pre_start+1,pre_start+leftlength,in_start,pos-1); root->right=buildSubTree(preorder,inorder,pre_start+leftlength+1,pre_end,pos+1,in_end); return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size()==0||inorder.size()==0) return NULL; return buildSubTree(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1); }
这里需要注意的是递归终止条件:pre_start>pre_end.
相关文章推荐
- 对数据文件的操作和文件流
- 加密算法—MD5、RSA、DES
- Windows下常用的100个CMD指令以及常见的操作
- EM算法
- IO:存储到数组里 需求:演示Reader中的read(char[]);读取方法。
- Mysql数据库修复
- Memcache 的安装
- 学习进度条 第十周
- Linux系统编程:基本I/O系统调用
- 匹配字符类
- Java之------单机版书店管理系统(设计思想和设计模式系列一)概述
- 20145201《Java程序设计》第十周学习总结
- System and Device Programming------device
- mysql插入时防止重复记录
- Git 基础(五)
- 蒙地卡罗树搜索
- IO里的输入
- IO里的输入
- couldn't load cocos2dcpp from loader dalvik.system.pathclassloader
- [JAVA修炼之路十二]- session管理