二叉树的前序/中序/后序/层序的非递归遍历算法
来源:互联网 发布:linux 剪切文件夹 编辑:程序博客网 时间:2024/04/29 05:21
//前序遍历----非递归 void PreOrderBinaryTree_Nor() { if (NULL == _pRoot) return; cout << "PreOrderBinaryTree_Nor:" << endl; stack<BinaryTreeNode<T>*> s;//使用栈 s.push(_pRoot); while (!s.empty()) { BinaryTreeNode<T>* pCur = s.top(); cout << pCur->_data << " "; s.pop(); if (NULL != pCur->_pRightChild) s.push(pCur->_pRightChild); if (NULL != pCur->_pLeftChild) s.push(pCur->_pLeftChild); } cout << endl; } //中序遍历----非递归 void InOrderBinaryTree_Nor() { if (NULL == _pRoot) return; cout << "InOrderBinaryTree_Nor:" << endl; stack<BinaryTreeNode<T>*> s;//使用栈 BinaryTreeNode<T>* pCur = _pRoot; while (pCur || !s.empty()) { //找最左边的结点 while(pCur) { s.push(pCur); pCur = pCur->_pLeftChild; } BinaryTreeNode<T>* pTop = s.top(); cout << pTop->_data << " "; s.pop(); pCur = pTop->_pRightChild; } cout << endl; } //后序遍历----非递归 void PostOrderBinaryTree_Nor() { if (NULL == _pRoot) return; cout << "PostOrderBinaryTree_Nor:" << endl; stack<BinaryTreeNode<T>*> s;//使用栈 BinaryTreeNode<T>* pCur = _pRoot; BinaryTreeNode<T>* prev = NULL;//保存最近访问的结点 while (pCur || !s.empty()) { while (pCur) { s.push(pCur); pCur = pCur->_pLeftChild; } BinaryTreeNode<T>* pTop; pTop = s.top(); if (NULL == pTop->_pRightChild || pTop->_pRightChild == prev) { cout << pTop->_data<<" "; prev = pTop; s.pop(); } else { pCur = pTop->_pRightChild; } } cout << endl; } //层序遍历 void LevelOrderBinaryTree() { if (NULL == _pRoot) return; cout << "LevelOrderBinaryTree:" << endl; queue<BinaryTreeNode<T>*> q;//借助队列 q.push(_pRoot); while (!q.empty()) { BinaryTreeNode<T>* pCur = q.front(); cout << pCur->_data << " "; if (NULL != pCur->_pLeftChild) q.push(pCur->_pLeftChild); if (NULL != pCur->_pRightChild) q.push(pCur->_pRightChild); q.pop(); } cout << endl; }
阅读全文
0 0
- 二叉树的前序/中序/后序/层序的非递归遍历算法
- C# 二叉树的非递归中序 前序 后序遍历 层序遍历
- 二叉树的遍历(前序,中序,后序,层序)--递归和非递归算法实现
- 二叉树的遍历:前序、中序、后序、层序的非递归实现
- 二叉树的非递归【前/中/后 序遍历】
- C++实现二叉树的非递归遍历(层,前,中,后序)
- 二叉树的遍历(前 中 后序 )递归 非递归算法
- (前、中、后)序遍历二叉树的递归、非递归算法!
- 【二叉树遍历算法】——前/中/后序递归与非递归的实现
- 【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
- 二叉树的前序,中序,后序的递归与非递归遍历以及按层遍历
- 二叉树的,前/中/后序的遍历( 递归,非递归),层序遍历,以及各种应用功能
- 二叉树的前、中、后序遍历(递归和非递归)、层序遍历、深度、叶子节点个数
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- 二叉树的非递归前序,中序,后序遍历算法
- 二叉树的遍历: 前序,中序,后序----非递归算法
- 用java实现二叉树非递归的前序,中序,后序遍历算法
- 前序/中序/后序遍历二叉树的非递归算法
- hdu4607 Park Visit 树形DP版
- 开始学习H5的日子-第一天
- 如何根据前序遍历和中序遍历重建二叉树
- 不定期更新书籍
- java面向对象—类的带参方法—修改客户姓名
- 二叉树的前序/中序/后序/层序的非递归遍历算法
- Java+opencv3.2.0之二值化
- Cuda 学习教程(五):GPU架构-Sp,sm,thread,block,grid,warp
- 多文件上传
- Android视频桌面,动态桌面开发
- 输入一个链表,输出该链表中倒数第k个结点
- 网站优化基本环节,企业都有做到吗?
- Javascript案例之计时器和倒计时器
- centos 使用rz、sz指令进行上传下载