数据结构--树:二叉树的遍历方式(递归和非递归)
来源:互联网 发布:基于arm的ubuntu 编辑:程序博客网 时间:2024/06/08 13:16
#include<stdio.h>#include<iostream>#include<malloc.h>#include<stack>using namespace std;typedef struct BTNode{char data;struct BTNode *lchild;struct BTNode *rchild;}BTNode,*BTree;void CreateBTree(BTree &T){char ch;ch=getchar();if(ch=='#'){T=NULL;return;}else{T=(BTNode*)malloc(sizeof(BTNode));T->data=ch;CreateBTree(T->lchild);CreateBTree(T->rchild);}}void PreOrder(BTree T) // 先序遍历--递归{if(T==NULL)return;cout<<T->data;PreOrder(T->lchild );PreOrder(T->rchild );}void Preorder(BTree T) // 先序遍历--非递归{if(T==NULL)return;BTNode *p=T;stack<BTree> S;while(p!=NULL||!S.empty()){if(p!=NULL){S.push(p);cout<<p->data ;p=p->lchild;}else{p=S.top();S.pop();p=p->rchild;}}}void InOrder(BTree T) // 中序遍历--递归{if(T==NULL)return ;InOrder(T->lchild );cout<<T->data ;InOrder(T->rchild );}void Inorder(BTree T) // 中序遍历--非递归{if(T==NULL)return;BTNode *p=T;stack<BTree> S;while(p!=NULL||!S.empty()){if(p!=NULL) //走到最左边{S.push(p);p=p->lchild;}else //向右{ p=S.top(); //取栈顶结点S.pop();cout<<p->data ;p=p->rchild;}}}void PostOrder(BTree T){if(T==NULL)return;PostOrder(T->lchild );PostOrder(T->rchild );cout<<T->data ;}void Postorder(BTree T) // 先序遍历--非递归{if(T==NULL)return;BTNode *p=T,*r=NULL;stack<BTree> S;while(p!=NULL||!S.empty()){if(p!=NULL) //走到最左边{S.push(p);p=p->lchild ;}else //向右{p=S.top(); //取栈顶结点if(p->rchild&&p->rchild !=r) //如果右子树存在,且未被访问过{p=p->rchild; //转向右S.push(p); p=p->lchild ; //再走到最左}else //否则,说明右子树已经被访问过, 弹出结点并访问{p=S.top();S.pop(); cout<<p->data ;r=p; //指向最近访问过的结点p=NULL; //结点访问完后,重置p指针}}}}void main(){BTree T;printf("递归先序建立二叉树(空节点用#代替):");CreateBTree(T);printf("递归先序遍历:");PreOrder(T);printf("\n");printf("非递归先序遍历:");Preorder(T);printf("\n");printf("递归中序遍历:");InOrder(T);printf("\n");printf("非递归中序遍历:");Inorder(T);printf("\n");printf("递归后序遍历:");PostOrder(T);printf("\n");printf("非递归后序遍历:");Postorder(T);printf("\n");}
0 0
- 数据结构--树:二叉树的遍历方式(递归和非递归)
- 数据结构--树和二叉树--二叉树的创建和遍历(递归和非递归方式)
- 数据结构之二叉树遍历(递归和非递归)
- 二叉树的前中后序遍历,递归和非递归方式
- 【数据结构】二叉树的遍历(递归与非递归)
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
- 数据结构 二叉树的非递归遍历
- 数据结构:二叉树的非递归遍历
- 二叉树的非递归遍历-数据结构
- 数据结构:二叉树的前序,中序,后序遍历(递归和非递归)
- 二叉树的遍历(递归和非递归)
- 二叉树的遍历(递归和非递归)
- 二叉树的建立和遍历(递归、非递归)
- 二叉树的遍历(非递归和递归实现)
- 二叉树的先序中序后序遍历 (递归和非递归)
- 二叉树的遍历算法(递归和非递归)
- 二叉树的递归和非递归遍历(java)
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- Spring+SpringMVC+Mybatis+Mysql整合实例
- 如何解决SVN的clean up问题
- 毕业设计-AudioVideo(一)
- 18.Struts2__声明式异常处理
- Remote 'g' packet reply is too long 解决方法
- 数据结构--树:二叉树的遍历方式(递归和非递归)
- 基于Tensorflow的CNN简单实现
- Revit二次开发之“族”操作
- 第三届蓝桥杯 第一题
- Gradle 1.12用户指南翻译——第五十八章. 编写自定义插件
- 【Linux】inode信息详解
- LDPC码译码算法---NMS matlab程序
- Search Insert Position
- 使用HTML语言和CSS开发商业站点第三章