递归建立普通二叉树两种方式遍历
2017-09-22 17:45
501 查看
#include<bits/stdc++.h> using namespace std; struct BinNode { char data; BinNode* lchild; BinNode* rchild; }; int CreateBinTree1(BinNode* &T)//建立时候按先序建立,先画出来对照先序输入中间无空格 { char data; data=getchar(); if(data=='#') T=NULL; else { T=new BinNode(); T->data=data; CreateBinTree1(T->lchild); CreateBinTree1(T->rchild); } return 0; } void Visit(BinNode* &T) { if(T->data!='#') cout<<T->data<<" "; } void PreOrder(BinNode* &T) { if(T!=NULL) { Visit(T); PreOrder(T->lchild); PreOrder(T->rchild); } } void MidOrder(BinNode* &T) { if(T!=NULL) { MidOrder(T->lchild); Visit(T); MidOrder(T->rchild); } } void PostOrder(BinNode* &T) { if(T!=NULL) { PostOrder(T->lchild); PostOrder(T->rchild); Visit(T); } } void PreOrder2(BinNode* &T) { stack<BinNode*> stack; BinNode* p=T; while(p||!stack.empty()) { if(p!=NULL) { stack.push(p); cout<<p->data<<" "; p=p->lchild; } else { p=stack.top(); stack.pop(); p=p->rchild; } } } void MinOrder2(BinNode* &T) { BinNode* p=T; stack<BinNode*> stack; while(p||!stack.empty()) { if(p!=NULL) { stack.push(p); p=p->lchild; } else { p=stack.top(); stack.pop(); cout<<p->data<<" "; p=p->rchild; } } } struct Bin { BinNode* node; char flag; }; void PostOrder2(BinNode* &T) { stack<Bin*> stack; BinNode* p=T; Bin* b; while(p!=NULL||!stack.empty()) { while(p!=NULL) { b=new Bin; b->node=p; b->flag='L'; stack.push(b); p=p->lchild; } while(!stack.empty()&&(stack.top())->flag=='R') { b=stack.top(); stack.pop(); cout<<b->node->data<<" "; } if(!stack.empty()) { b=stack.top(); b->flag='R'; p=b->node; p=p->rchild; } } } int main() { BinNode* T=NULL; CreateBinTree1(T); PreOrder(T); cout<<endl; MidOrder(T); cout<<endl; //char* ch="111"; //cout<<*ch; PostOrder(T); cout<<endl; PreOrder2(T); cout<<endl; MinOrder2(T); cout<<endl; PostOrder2(T); return 0; }
相关文章推荐
- 二叉树的两种遍历方式[递归遍历][非递归遍历]
- 两种方式遍历二叉树--递归方式和非递归方式
- (C++)二叉树的建立与递归方式遍历
- 数据结构_二叉树的先序建立与先序,中序,后序(递归)遍历方式_C语言源代码
- 二叉树的建立以及三种遍历方式的递归、非递归的实现
- 两种方式遍历二叉树--递归方式和非递归方式
- C语言二叉树建立,遍历(递归与非递归),交换子树
- 【非递归】二叉树的建立及遍历
- 二叉树(15)----由中序遍历和后序遍历重建二叉树,递归方式
- Java三种遍历方式打印二叉树(递归实现)
- 二叉树三种遍历方式非递归实现
- 由树的前序遍历,中序遍历建立一颗二叉树,并以后续遍历的方式输出其元素
- 二叉树建立 ---层次遍历方式
- java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历
- 二叉树的建立以及先序中序后序递归遍历
- 括号法递归建立二叉树并层序遍历输出
- 二叉树非递归先序建立与后序遍历
- 二叉树的深度优先遍历(先、中、后序方式-递归和非递归)和广度优先遍历
- 二叉树递归建立--深搜+宽搜遍历
- 用递归方式实现二叉树先序、中序、后序遍历