【算法题】重建二叉树
来源:互联网 发布:淘宝优优管家是真的吗 编辑:程序博客网 时间:2024/06/14 16:47
已知先序遍历和中序遍历,重建二叉树
#include <iostream>#include <numeric>#include<algorithm>using namespace std;struct Tree{ double value; Tree* left; Tree* right;};void Print(Tree* root){ if (root == NULL) return; queue<Tree*> queue_current; queue<Tree*> queue_next; auto * p_current = &queue_current; auto * p_next = &queue_next; Tree* p = root; p_next->push(p); while (!(*p_next).empty()) { std::swap(p_current, p_next); while (!(*p_current).empty()) { p = p_current->front(); p_current->pop(); cout << p->value << " "; if (p->left != NULL) { p_next->push(p->left); } if (p->right != NULL) { p_next->push(p->right); } } cout << endl; }}Tree* ReconstructCore(int* prestart, int * preend, int * midstart, int * midend){ Tree * tmp; tmp = new Tree; tmp->value = *prestart; int c = find(midstart, midend + 1, *prestart) - midstart; if (c != 0) { tmp->left = ReconstructCore(prestart + 1, prestart + c,midstart,midstart+c-1); } else { tmp->left = NULL; } if (midstart + c != midend) { tmp->right = ReconstructCore(prestart+c+1,preend,midstart+c+1,midend ); } else { tmp->right = NULL; } return tmp;}Tree* Reconstruct(int* pre, int* mid,int len){ if (pre == NULL || mid == NULL || len <= 0) return NULL; return ReconstructCore(pre, pre + len - 1, mid, mid + len - 1);}int main(){ int pre[8]{ 1, 2, 4, 7, 3, 5, 6, 8 }; int mid[8]{ 4, 7, 2, 1, 5, 3, 8, 6 }; Tree *root = Reconstruct(pre, mid,8); Print(root); return 0;}
阅读全文
0 0
- 【算法题】重建二叉树
- 算法题/重建二叉树
- 算法-重建二叉树
- 算法-重建二叉树
- 算法题17 重建二叉树
- 算法题目---重建二叉树
- 算法:二叉树的重建
- 剑指offer-算法题练习:part4 重建二叉树
- 每天一道算法题——重建二叉树
- 面试算法(五)重建二叉树
- 面试算法—重建二叉树
- 【数据结构与算法】重建二叉树
- 算法练习四:重建二叉树
- [算法学习]输入遍历重建二叉树
- 算法题目-二叉树的重建
- 重建二叉树 -- 漫漫算法路 刷题篇
- [剑指offer]算法4 重建二叉树
- 剑指Offer算法题之已知两种遍历方式重建二叉树--面试题6:重建二叉树
- kubernetes scheduler 启动过程及调度过程
- IIC设备驱动程序
- 初学数据结构---图
- MPI环境支持的PSO算法
- opencv K均值算法
- 【算法题】重建二叉树
- mysql5.7编译安装
- 机器学习与数据挖掘相关算法汇总
- 用C编写一个my2DAlloc函数
- 计提与摊销的区别
- JAVA面试要点006---.net中的委托与java中的代理模式和委托
- 【JavaScript】第一篇
- c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)
- Linux学习总结(二)