二叉树的遍历算法(递归和非递归)
2016-08-30 23:57
218 查看
二叉树的遍历
1.递归实现
void PreOrder(BiTree T) { if(T!=NULL) { printf("%d ",T->data); PreOrder(T->lchlid); PreOrder(T->rchlid); } } void InOrder(BiTree T) { if(T!=NULL) { InOrder(T->lchlid); printf("%d ",T->data); InOrder(T->rchlid); } } void PostOrder(BiTree T) { if(T!=NULL) { PostOrder(T->lchlid); PostOrder(T->rchlid); printf("%d ",T->data); } }
2.非递归实现
前序遍历void _PreOrder(BiTree T) { BiTree p=T; top=-1; Stack[++top]=p; while(top>=0) { p=Stack[top--]; printf("%d ",p->data); if(p->rchlid) Stack[++top]=p->rchlid; if(p->lchlid) Stack[++top]=p->lchlid; } }
中序遍历
void _InOrder(BiTree T) { BiTree p=T; top=-1; while(p||top>=0) { if(p) { Stack[++top]=p; p=p->lchlid; } else { p=Stack[top--]; printf("%d ",p->data); p=p->rchlid; } } }
后序遍历
void _PostOrder(BiTree T) { BiTree p=T,r=NULL; top=-1; while(p||top>=0) { if(p) { Stack[++top]=p; p=p->lchlid; } else { p=Stack[top]; if(p->rchlid&&p->rchlid!=r) { p=p->rchlid; } else { top--; printf("%d ",p->data); r=p; p=NULL; } } } }
相关文章推荐
- 二叉树各种遍历算法(递归以及非递归)6
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)(转)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)[整理]
- 算法 - 遍历二叉树- 递归和非递归
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)(转)
- 二叉树的遍历算法(递归与非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)
- 二叉树创建及遍历算法(递归及非递归)