c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
2024-08-31 01:11:31
二叉树的创建
思路:数组中从上到下依次放着二叉树中的元素,使用递归很容易实现,那么这里使用容器来存放之前的状态实现循环创建二叉树。
TreeNode* createTree(int *arr, int length) {
if(length<) return NULL;
TreeNode* root = new TreeNode(arr[]);
deque<pair<TreeNode*,int> > route;
route.push_back(make_pair(root,));
while(!route.empty()) {
TreeNode* temp = route.front().first;
int ct = route.front().second;
route.pop_front();
if(*ct+<length) {
temp->left = new TreeNode(arr[*ct+]);//创建当前节点的左叶子
route.push_back(make_pair(temp->left,*ct+));
}
if(*ct+<length) {
temp->right = new TreeNode(arr[*ct+]);//创建当前节点的右叶子
route.push_back(make_pair(temp->right,*ct+));
} }
return root;
}
二叉树的先序、中序和后序遍历
思路:借用之前看到的一篇文章,可以使用同一套代码完成这3种遍历,主要思想是有重合元素的局部有序能使整体有序。
void PostOrder(TreeNode* root) {
deque<pair<TreeNode*, bool> > route;
route.push_back(make_pair(root, false));
while(!route.empty()) {
TreeNode* root = route.back().first;
bool visit = route.back().second;
route.pop_back();
if(root==NULL)
continue;
if(visit) {
cout << root->val << ' ';
} else {//改变下面三者的顺序就可以实现三种排序
route.push_back(make_pair(root, true));
route.push_back(make_pair(root->right, false));
route.push_back(make_pair(root->left, false)); }
}
}
最新文章
- Git初使用
- 在block中使用self
- 返回绝对值--Math.Abs 方法
- C 语言中 free() 函数简单分析
- HTML和JSON的数据交互-HTML模板
- 获取context path或者basePath
- 调用[[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad判断设备
- 【Java并发编程】并发编程大合集-值得收藏
- MYBATIS 简单整理与回顾
- pouchdb-all-dbs插件
- MacOS和iOS开发中异步调用与多线程的区别
- [Swift]LeetCode412. Fizz Buzz
- Web漏洞扫描工具(批量脱壳、反序列化、CMS)
- [matlab] 22.matlab图论实例 最短路问题与最小生成树 (转载)
- 上传第三方jar包至maven私服,以geotools为例
- 注意兼容浮点运算误差 0.7 + 0.1 ==0.8 为false
- hdu 1.2.5
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验八:PS/2模块② — 键盘与组合键
- Oracle EBS - Setup: 配置文件Profile
- JPA映射持久化对象(Entity)