数据结构之树和二叉树---二叉树的遍历
来源:互联网 发布:淘宝网云裳广场舞服装 编辑:程序博客网 时间:2024/05/29 02:10
问题:分别用递归和非递归方式实现二叉树的先序遍历,中序遍历,后序遍历及层序遍历
二叉树的基本操作见数据结构之树和二叉树---二叉树的基本操作
//递归方式实现先序遍历
void PreOrderTraverse(BiTree bt){if(bt){printf("%c ", bt->data);PreOrderTraverse(bt->lchild);PreOrderTraverse(bt->rchild);}elseprintf("0 ");}
//递归方式实现中序遍历
void InOrderTraverse(BiTree bt){if(bt){InOrderTraverse(bt->lchild);printf("%c ", bt->data);InOrderTraverse(bt->rchild);}elseprintf("0 ");}
//递归方式实现后序遍历
void PostOrderTraverse(BiTree bt){if(bt){PostOrderTraverse(bt->lchild);PostOrderTraverse(bt->rchild);printf("%c ", bt->data);}elseprintf("0 ");}
//递归方式实现层序遍历
void LevelOrderTraverse(BiTree bt, LinkQueue *lq){ElemType elem;if(lq->front!=lq->rear){DeQueue(lq, &elem);if(elem!=NULL){printf("%c ", elem->data);EnQueue(lq, elem->lchild);EnQueue(lq, elem->rchild);}elseprintf("0 ");LevelOrderTraverse(bt, lq);}}
//非递归方式实现先序遍历
void PreOrderTraverse_N_Recur(BiTree bt){ElemType stackElem;MyStack *stack = InitStack();PushStack(stack, bt);while(stack->top!=stack->base){PopStack(stack,&stackElem);if(stackElem!=NULL){printf("%c ", stackElem->data);PushStack(stack,stackElem->rchild);PushStack(stack, stackElem->lchild);}elseprintf("0 ");}}
//非递归方式中序遍历
void InOrderTraverse_N_Recur(BiTree bt){ElemType stackElem;MyStack *stack = InitStack();PushStack(stack, bt);while(stack->top!=stack->base){while((stackElem=(*(stack->top-1))->lchild)!=NULL)PushStack(stack, stackElem);do{printf("0 ");PopStack(stack, &stackElem);printf("%c ", stackElem->data);}while(!stackElem->rchild&&stack->top!=stack->base);if(stackElem->rchild!=NULL)PushStack(stack, stackElem->rchild);elseprintf("0 ");}}
//非递归方式后序遍历
void PostOrderTraverse_N_Recur(BiTree bt){ElemType stackElem;MyStack *stack = InitStack();BiTNode *tbn;PushStack(stack, bt);while(stack->top!=stack->base){while((stackElem=*(stack->top-1))->lchild!=NULL)PushStack(stack, stackElem->lchild);printf("0 ");if(stackElem->rchild!=NULL)PushStack(stack, stackElem->rchild);else{printf("0 ");PopStack(stack, &stackElem);while (stack->top!=stack->base){while((*(stack->top-1))->rchild==stackElem){printf("%c ", stackElem->data);PopStack(stack, &stackElem);if (stack->top==stack->base){printf("%c ", stackElem->data);return ;}}if((*(stack->top-1))->lchild==stackElem){printf("%c ", stackElem->data);if((*(stack->top-1))->rchild!=NULL){PushStack(stack, (*(stack->top-1))->rchild);break;}else{printf("0 ");PopStack(stack, &stackElem);}}}}}return ;}
//非递归方式实现层序遍历
void LevelOrderTraverse_N_Recur(BiTree bt){ElemType elem;LinkQueue *lq = InitQueue();EnQueue(lq, bt);while(lq->front!=lq->rear){DeQueue(lq, &elem);if(elem!=NULL){printf("%c ", elem->data);EnQueue(lq, elem->lchild);EnQueue(lq, elem->rchild);}elseprintf("0 ");}}
0 0
- 数据结构之树和二叉树---二叉树的遍历
- 数据结构之二叉树遍历
- 数据结构之二叉树遍历
- 数据结构之二叉树的遍历汇总
- java数据结构之二叉树的遍历
- 数据结构之二叉树的遍历
- 数据结构之二叉树的遍历
- 数据结构实验之二叉树的遍历
- 数据结构之二叉树的递归建立和遍历
- 数据结构之二叉树的递归建立和遍历(续)
- 数据结构---二叉树的创建和遍历
- 数据结构-二叉树和二叉树的遍历
- java数据结构二叉树的遍历和二叉查找树
- 二叉树的遍历:数据结构实验之二叉树二:遍历二叉树
- [C++ 二叉树的构建与遍历] 数据结构实验之二叉树二:遍历二叉树
- 数据结构 - 二叉树的遍历
- 数据结构-----二叉树的遍历
- 数据结构----二叉树的遍历
- HTML5中新增的Input类型有哪些
- 2015及2016计划
- 南邮 OJ 1961 计算机基础知识大赛 2 (new)
- Linux下QT编程之使用QVFB
- Spring @Autowired,@Resource,@Required注解的用法和作用
- 数据结构之树和二叉树---二叉树的遍历
- jQuery相关学习-Jquery的介绍和安装
- Espresso——实例分析
- Spring中使用到的设计模式 - 工厂模式
- 可能出现编码问题的地方
- 持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)
- 南邮 OJ 1963 带妹子去看电影
- C++格式化输出
- Leetcode #209 Minimum Size Subarray Sum