C++实现二叉树的非递归前、中、后序遍历
来源:互联网 发布:linux安装squid 编辑:程序博客网 时间:2024/06/05 19:33
void NoRecursePreTraverse(BiTree tree){ stack<BiNode *> stack; BiNode *node = tree; while(node != NULL || !stack.empty()){ while(node != NULL){ cout << node->data <<" "; stack.push(node); node = node->lchild; } if(!stack.empty()){ node = stack.top(); node = node->rchild; stack.pop(); } }}void NoRecurseInTraverse(BiTree tree){ stack<BiNode *> stack; BiNode *node = tree; while(node != NULL || !stack.empty()){ while(node != NULL){ stack.push(node); node = node->lchild; } if(!stack.empty()){ node = stack.top(); cout << node->data << " "; stack.pop(); node = node->rchild; } }}struct BiTree_Flag{ BiNode *node; bool flag;};void NoRecursePostTraverse(BiTree tree){ stack<BiTree_Flag> stack; BiNode *node = tree; BiTree_Flag node_flag; while(node != NULL || !stack.empty()){ while(node != NULL){ node_flag.node = node; node_flag.flag = false; stack.push(node_flag); node = node->lchild; } if(!stack.empty()){ node_flag = stack.top(); stack.pop(); if(node_flag.flag == false){ node_flag.flag = true; stack.push(node_flag); node = node_flag.node; node = node->rchild; }else{ cout << node_flag.node->data << " "; } } }}
思想:1)前序遍历:访问根节点,根节点放入栈中。访问左子树,如果左子数为空,栈弹出根节点,访问右子数。
2)中序遍历:根节点入栈,访问左子树。如果左子树为空,栈弹出根节点,访问根节点,访问右子树。
3)后续遍历:定义新的数据结构,为每一个节点定义一个标志位flag,false代表访问过一次,true代表访问过两次。
根节点入栈,flage设为FALSE。访问左子树。左子树为空,根节点弹出,如果flag为false,设为true,
访问右节点。如果为flag为true,访问该节点。
0 0
- 二叉树非递归前、中、后序遍历实现
- 非递归实现二叉树的后序遍历、前序遍历、中序遍历
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树
- 二叉树的非递归【前/中/后 序遍历】
- 【二叉树】实现二叉树的前序、中序、后序的非递归遍历
- 二叉树的前序、中序、后序遍历 递归非递归实现
- 二叉树的前序、中序、后序(递归、非递归)遍历java实现
- 二叉树的前序,中序,后序遍历(递归非递归实现)
- 实现二叉树的前序/中序/后序递归、非递归遍历
- 二叉树的前序,中序,后序遍历。用递归和非递归实现
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- JAVA实现二叉树的前、中、后序遍历(递归与非递归)
- 二叉树非递归遍历 (前,中,后) c
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 二叉树的非递归前序,中序,后序遍历的Java实现
- 用java实现二叉树非递归的前序,中序,后序遍历算法
- 非递归实现二叉树的前序、中序、后序遍历
- 多选框全选功能
- MacOSX上那些有用的小插件
- Java Socket 使用BufferedWriter和BufferedReader要注意readLine 以及换行标志
- ORACLE备份保留策略(RETENTION POLICY)
- Linux下部署svn服务器
- C++实现二叉树的非递归前、中、后序遍历
- PHP连接mssql的配置
- Jasper Server Page Customization
- 拓扑排序。
- ubuntu 安装 xampp
- Ruby 获取当前的时间
- WebView缓存的清理问题
- 函数:PHP将字符串从GBK转换为UTF8字符集iconv
- AsyncTask异步加载数据分析