非递归遍历二叉树
来源:互联网 发布:小米盒电视直播软件 编辑:程序博客网 时间:2024/06/09 20:31
前序遍历和中序遍历较简单,都是一直向左遍历,遍历完全后最后元素出栈,向右一步后继续向左遍历直至栈空。
后序遍历的话想了很久,最后想着反向遍历,一直向右遍历,遍历完全后最后元素出栈,向左一步后继续依次向右遍历直至栈空,myList为了控制遍历完全,saveList则是将遍历到的元素全部入栈。
这三个程序也想了很长时间,不过想出来了还是很开心!
因为stack的代码找不到了,就用list代替了。
前序遍历
template
void BinaryTree::Preorder(void(*visit)(Entry&))
{
List<BinaryNode<Entry>*> myList;BinaryNode<Entry> *p = root;while (p || !myList.empty()){ while (p) { (*visit)(p->data); myList.insert(0, p); p = p->left; } //myList.retrieve(0, p); myList.remove(0, p); p = p->right;}
}
//中序遍历
template
void BinaryTree::Inorder(void(*visit)(Entry&))
{
List<BinaryNode<Entry>*> myList;BinaryNode<Entry> *p = root;while (p || !myList.empty()){ while (p) { myList.insert(0, p); p = p->left; } myList.remove(0, p); (*visit)(p->data); p = p->right;}
}
//后序遍历
template
void BinaryTree::Preorder(void(*visit)(Entry&))
{
List<BinaryNode<Entry>*> saveList;List<BinaryNode<Entry>*> myList;BinaryNode<Entry> *p = root;while (p || !myList.empty()){ while (p) { saveList.insert(0, p);//将遍历到的指针入栈 myList.insert(0, p);//保证遍历完全 p = p->right; } myList.remove(0, p); p = p->left;}while (!saveList.empty()){ saveList.remove(0, p); (*visit)(p->data);}
}
0 0
- 非递归遍历二叉树
- 二叉树遍历非递归
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树遍历--非递归
- 二叉树非递归遍历
- 非递归遍历二叉树
- 二叉树非递归遍历
- 二叉树非递归遍历
- PPT制作方法1
- 怎么把pdf转换成ppt格式
- 面试汇总
- js实现点击图片自动提交action
- 大数据比赛(3)- 模型选择I
- 非递归遍历二叉树
- C++ 基础
- ScriptBasedMapping,CachedDNSToSwitchMapping,AbstractDNSToSwitchMapping,DNSToSwitchMapping类层次分析
- 十二、图的算法入门--(4)最短路问题---Dijkstra算法实现
- java.util.Collections空集合
- 算法重头学-归并排序
- iOS(七)在线订餐系统 一:工程初建
- 第n+1天
- StringUtils.isNotBlank("stringstr")