二叉树的遍历
来源:互联网 发布:淘宝售后人工客服电话 编辑:程序博客网 时间:2024/06/05 11:01
树:
1、前序遍历:根节点+左子树+右子树
(1)递归
void _PreOrder(pNode& root)//递归前序遍历(根节点+左子树+右子树){if (root){cout << root->_data << " ";_PreOrder(root->_pleft);_PreOrder(root->_pright);}}
(2)非递归
void _PreOrder(pNode root)//非递归前序遍历(根节点+左子树+右子树){if(root == NULL)return;stack<pNode> s;pNode cur = root;while(!s.empty()||cur){while (cur){s.push(cur);cout << cur->_data << " ";cur = cur->_pleft;}pNode top = s.top();s.pop();cur = top->_pright;}cout<<endl;}
2、中序遍历:左子树+根节点+右子树
(1)递归
void _InOrder(pNode& root)//递归中序遍历(左子树+根节点+右子树){if (root){_InOrder(root->_pleft);cout << root->_data << " ";_InOrder(root->_pright);}}
(2)非递归
void _InOrder(pNode& root)//非递归中序遍历(左子树+根节点+右子树){if (root == NULL)return;stack<pNode> s;pNode cur = root;while (!s.empty() || cur){while (cur){s.push(cur);cur = cur->_pleft;}if (!s.empty()){cur = s.top();s.pop();cout << cur->_data << " ";cur = cur->_pright;}}cout << endl;}
3、后序遍历:左子树+右子树+根节点
(1)递归
void _PostOrder(pNode& root)//递归后序遍历(左子树+右子树+根节点){if (root){_PostOrder(root->_pleft);_PostOrder(root->_pright);cout << root->_data << " ";}}
(2)非递归
void _PostOrder(pNode& root)//非递归后序遍历(左子树+右子树+根节点){if (root == NULL)return;stack<pNode> s;pNode cur = root;pNode last = NULL;while ( cur){s.push(cur);cur = cur->_pleft;}while(!s.empty()){cur = s.top();s.pop();if (cur->_pright == NULL || cur->_pright == last){cout << cur->_data << " ";last = cur;}else{s.push(cur);cur = cur->_pright;while (cur){s.push(cur);cur = cur->_pleft;}}}cout << endl;}
4、层序遍历:层序遍历的算法:
(1)初始化一个队列
(2)把根节点的指针入队列
(3)当队列非空时,循环执行以下步骤:
>>出队列取一个节点
>>若该队列的左子树为空,将左子树的指针入队列
>>若该队列的右子树为空,将右子树的指针入队列
void _LevelOrder(pNode& root)//层次遍历{queue<pNode> q;if (root)q.push(root);while (!q.empty()){pNode pCur = q.front();q.pop();cout << pCur->_data << " ";if (pCur->_pleft)q.push(pCur->_pleft);if (pCur->_pright)q.push(pCur->_pright);}cout << endl;}
运行结果:
阅读全文
0 0
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 《PCL点云库学习&VS2010(X64)》Part 47 鼠标选取点云坐标的计算原理
- SOAP知识汇总
- 射频电子学基础:电磁频谱分段
- javascript浏览器对象之计时器
- D3.js中Force-Directed Graph详解
- 二叉树的遍历
- 36. Valid Sudoku
- 二维码的扫描
- 约数个数定理
- 图的基础概念
- WordLadder
- HTML之:CSS控制的首页初级布局
- PAT-1027.在霍格沃茨找零钱(20)
- 浅谈C++中的构造函数与析构函数