二叉树三种遍历调试运行版
2012-12-16 16:22
204 查看
头文件:
先序输入建立:
三种遍历方法:
main函数:
#include <stdio.h> struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };
先序输入建立:
void Create_BT(BinaryTreeNode *&bt)//先序输入二叉树 { int d; scanf("%d",&d); if(d==-1)bt=NULL; else { bt=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode)); bt->m_nValue=d; Create_BT(bt->m_pLeft); Create_BT(bt->m_pRight); } }
三种遍历方法:
void PreOrder(BinaryTreeNode *bt) { if(bt!=NULL) { printf("%d\n",bt->m_nValue); PreOrder(bt->m_pLeft); PreOrder(bt->m_pRight); } } void InOrder(BinaryTreeNode *bt) { if(bt!=NULL) { InOrder(bt->m_pLeft); printf("%d\n",bt->m_nValue); InOrder(bt->m_pRight); } } void PostOrder(BinaryTreeNode *bt) { if(bt!=NULL) { PostOrder(bt->m_pLeft); PostOrder(bt->m_pRight); printf("%d\n",bt->m_nValue); } } void PreOrderStack(BinaryTreeNode *bt) { BinaryTreeNode *s[20];//栈 BinaryTreeNode *p=bt; int top=-1; while(p||top>-1) { while(p) { printf("%d\n",p->m_nValue); s[++top]=p; p=p->m_pLeft; } if(top>-1) { p=s[top]; top--; p=p->m_pRight; } } } void InOrderStack(BinaryTreeNode *bt) { BinaryTreeNode *s[20];//栈 BinaryTreeNode *p=bt; int top=-1; while(p||top>-1) { while(p) { s[++top]=p; p=p->m_pLeft; } if(top>-1) { p=s[top]; printf("%d\n",p->m_nValue); top--; p=p->m_pRight; } } } //后序二叉树非递归 struct stacknode { BinaryTreeNode *node; int tag;//tag=0表示左子女已访问,tag=1表示右子女已访问 }; void PostOrderStack(BinaryTreeNode *bt) { stacknode s[20];//栈 stacknode temp;//暂存结点信息 BinaryTreeNode *p=bt; int top=-1; while(p||top>-1) { while(p) { temp.node=p; temp.tag=0; s[++top]=temp; p=p->m_pLeft; } while(top>-1&&s[top].tag==1)//右子树已访问 { printf("%d\n",s[top--].node->m_nValue); } if(top>-1) { s[top].tag=1; p=s[top].node; p=p->m_pRight; } } }
main函数:
int main() { while(true) { BinaryTreeNode *bt; Create_BT(bt); PreOrderStack(bt); InOrderStack(bt); PostOrderStack(bt); //PreOrder(bt); //InOrder(bt); //PostOrder(bt); } return 0; }
相关文章推荐
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 二叉树三种遍历方式非递归实现
- 二叉树三种遍历的非递归形式
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 二叉树的三种遍历方式(递归、非递归和Morris遍历)
- 二叉树先序、中序、后序三种遍历的…
- 二叉树的生成与三种遍历
- 二叉树三种顺序遍历应用
- [转载]二叉树先序、中序、后序三种遍历的非递归算法
- 二叉树的三种遍历
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- 二叉树中的三种遍历方式
- 二叉树 三种遍历构造二叉树+层次遍历 题目 PAT 树的遍历
- 二叉树的前序、中序、后序三种遍历的六种实现方式(递归、非递归)(C++)
- 二叉树的三种遍历
- 二叉树三种遍历及还原
- 二叉树操作之三种遍历方法
- 二叉树的创建和前中后三种遍历方法
- 看懂二叉树的三种遍历
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)