重建二叉树
来源:互联网 发布:超人幻想 知乎 编辑:程序博客网 时间:2024/06/10 07:52
/* 重建二叉树 pre 1,2,4,7,3,5,6,8 in 4,7,2,1,5,3,8,6*/struct BinTree{ int m_nValue; BinTree* m_pLeft; BinTree* m_pRight; BinTree(int x) : m_nValue(x), m_pLeft(NULL), m_pRight(NULL) {} BinTree(int x,BinTree* l,BinTree* r) : m_nValue(x), m_pLeft(l), m_pRight(r) {}};BinTree* ConstructCore(int* startpre, int *endpre, int* startin, int* endin){ int rootvalue = startpre[0]; BinTree* root = new BinTree(rootvalue); if (startpre == endpre) { if (startin == endin && *startpre == *startin) return root; else throw std::exception("invalid input"); } int *rootIn = startin; while (rootIn <= endin && *rootIn != rootvalue) ++rootIn; if (rootIn == endin && *rootIn != rootvalue) throw std::exception("invalid input"); int LeftLength = rootIn - startin; int* LeftPreorderEnd = startpre + LeftLength; if (LeftLength > 0) { root->m_pLeft = ConstructCore(startpre + 1, LeftPreorderEnd, startin, rootIn - 1); } if (LeftLength < endpre - startpre) { root->m_pRight = ConstructCore(LeftPreorderEnd + 1, endpre, rootIn + 1, endin); } return root;}BinTree* Construct(int* pre, int* in, int length){ if (pre == NULL || in == NULL || length <= 0) return NULL; return ConstructCore(pre, pre + length - 1, in, in + length - 1);}//void test()//{// int pre[8] = { 1,2,4,7,3,5,6,8 };// int in[8] = { 4,7,2,1,5,3,8,6 };//// BinTree* root = Construct(pre, in, 8);// getchar();//}
3 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- python修改操作系统时间的方法
- GPU&VS2012&CUDA&matlab&Arrayfire杂记(二)——matlab
- 工作中遇到的问题
- Spring boot(4)-应用打包部署
- 关于百度地图API显示地区范围控制的问题
- 重建二叉树
- 60 IO流类库(二)
- linux ping不通外网unknown host xxxxx解决方法
- 查看MariaDB(MYSQL)数据库中用户及其拥有权限
- 在线数据迁移经验:如何为正在飞行的飞机更换引擎
- Tricks(二十一)—— 随机数
- Inventor API: 2017版本支持3D PDF
- SQL server 2005安装详记
- What kinds of iterators of C++'s copy function requires? What about reverse or unique?