二叉树系列——二叉树的定义以及各种遍历方式
来源:互联网 发布:javascript 严格模式 编辑:程序博客网 时间:2024/05/21 12:41
二叉树的三种遍历的递归和非递归实现,代码如下:
#include <iostream>#include <deque>#include <stack>#include <vector>using namespace std;//二叉树定义struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode*m_pRight;};//前序遍历,递归void PreOrderRecur(BinaryTreeNode*pRoot,vector<int>& vecSeq){if (pRoot==NULL){return;}cout << pRoot->m_nValue<<" ";vecSeq.push_back(pRoot->m_nValue);PreOrderRecur(pRoot->m_pLeft,vecSeq);PreOrderRecur(pRoot->m_pRight,vecSeq);}//前序遍历,非递归void PreOrderUnRecur(BinaryTreeNode*head){if (head==NULL){return;}//栈stack<BinaryTreeNode*> stackTemp;stackTemp.push(head);while (!stackTemp.empty()){BinaryTreeNode* temp = stackTemp.top();cout << temp->m_nValue;stackTemp.pop();if (temp->m_pRight!=NULL){stackTemp.push(temp->m_pRight);}if (temp->m_pLeft!=NULL){stackTemp.push(temp->m_pLeft);}}}//中序遍历,递归void InOrderRecur(BinaryTreeNode*tree){if (tree==NULL){return;}InOrderRecur(tree->m_pLeft);cout << tree->m_nValue;InOrderRecur(tree->m_pRight);}//中序遍历,非递归void InOrderUnRecur(BinaryTreeNode*head){if (head==NULL){return;}stack<BinaryTreeNode*> stackTemp;while (!stackTemp.empty()||head!=NULL){if (head!=NULL){stackTemp.push(head);head = head->m_pLeft;}else{BinaryTreeNode*temp = stackTemp.top();cout << temp->m_nValue;stackTemp.pop();head = head->m_pRight;}}}//后序遍历,递归void PostOrderRecur(BinaryTreeNode*tree){if (tree==NULL){return;}PostOrderRecur(tree->m_pLeft);PostOrderRecur(tree->m_pRight);cout << tree->m_nValue;}//后序遍历,非递归void PostOrderUnRecur(BinaryTreeNode*pHead){if (pHead==NULL){return;}stack<BinaryTreeNode*> stack1;stack<BinaryTreeNode*> stack2;stack1.push(pHead);while (!stack1.empty()){BinaryTreeNode*pTemp = stack1.top();stack2.push(pTemp);stack1.pop();if (pTemp->m_pLeft!=NULL){stack1.push(pTemp->m_pLeft);}if (pTemp->m_pRight!=NULL){stack1.push(pTemp->m_pRight);}}while (!stack2.empty()){cout << stack2.top()<<" ";stack2.pop();}cout << endl;}int main(){return 0;}
0 0
- 二叉树系列——二叉树的定义以及各种遍历方式
- 二叉树的创建以及各种遍历
- 二叉树遍历的各种方式
- 二叉树的各种遍历
- 二叉树的各种遍历
- 二叉树的各种遍历
- 二叉树的各种遍历
- 二叉树的各种遍历
- 二叉树的各种遍历
- 二叉树各种遍历方式实现
- 二叉树的各种遍历算法以及实例
- 二叉树的基本知识以及各种遍历(Java)
- 二叉树的各种遍历,二叉树改链表,二叉树复习
- 二叉树的构建及各种遍历方式
- 二叉树的创建与各种遍历方式
- 二叉树各种遍历
- 二叉树各种遍历
- 二叉树各种遍历
- leetcode:Restore IP Addresses 【Java】
- Android之Sqlite数据库的使用
- Java Bean简单介绍
- C-SCAUoj 删除字符串中的空格
- 展示浮点数格式C代码
- 二叉树系列——二叉树的定义以及各种遍历方式
- 关于java对象复制clone 给一个对象赋值 会随原来的对象变化
- 线程间协作:wait、notify、notifyAll
- 47. Permutations II LeetCode
- 2016SDAU课程练习一1016Q
- 接续符和转义符
- 【LeetCode】278. First Bad Version
- 语义化标签,和类名说再见
- 正则表达式初学习