二叉树前序遍历非递归算法
2012-12-05 17:10
232 查看
二叉树前序遍历非递归算法要用到栈。先遍历左子树,左子树全部进栈,再出栈,直到遇到有右孩子的节点,右孩子进栈。然后重复上述步骤。
// tree.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" struct Tnode { int data; struct Tnode *lchild; struct Tnode *rchild; }; struct Snode { struct Tnode *node; struct Snode *next; }; struct stack { struct Snode *top; struct Snode *bottom; }; void CreateTree(Tnode *&root) { int data; cin>>data; if(data!=0) { root=(Tnode*)malloc(sizeof(Tnode)); root->data=data; CreateTree(root->lchild); CreateTree(root->rchild); } else { root=NULL; } } void PrintTree(Tnode *root) { if(root!=NULL) { cout<<root->data<<endl; PrintTree(root->lchild); PrintTree(root->rchild); } } void initStack(stack *s) { s->bottom=NULL; s->top=NULL; } void push(stack *s,Tnode *tn) { Snode *node=(Snode*)malloc(sizeof(Snode)); node->node=tn; node->next=s->top; s->top=node; } Tnode *pop(stack *s) { Tnode *node=s->top->node; s->top=s->top->next; return node; } int _tmain(int argc, _TCHAR* argv[]) { Tnode *root; CreateTree(root); Tnode *node=root; stack *s=(stack*)malloc(sizeof(stack)); initStack(s); push(s,node); cout<<node->data<<endl; node=node->lchild; while (s->top!=NULL) //先遍历左子树,在遍历右子数 { while (node!=NULL) { push(s,node); cout<<node->data<<endl; node=node->lchild; } node=pop(s); if(s->top!=NULL) { node=pop(s); node=node->rchild; push(s,node); } } return 0; }
相关文章推荐
- 二叉树前序遍历的非递归算法
- 【LeetCode】Binary Tree Preorder Traversal 二叉树前序遍历递归以及非递归算法
- 二叉树前序遍历的非递归算法
- 二叉树前序、中序、后序三种遍历的非递归算法
- 拆半查找的递归和非递归算法
- 遍历磁盘文件的递归和非递归算法
- 归并排序之非递归算法
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法。
- 遍历二叉树的非递归算法
- 二叉树深度优先遍历的非递归算法
- 归并排序的非递归算法
- 汉诺塔递归算法与非递归算法
- 三种快速排序算法的实现(递归算法、非递归算法、三路划分快速排序)
- 遍历二叉树的非递归算法
- 二分查找法(递归和非递归算法)
- 排列问题的递归算法和非递归算法
- 二叉树前序遍历(递归)
- 数据结构上机实验之二分查找【二分查找】【递归与非递归算法示例】
- 关于二叉树的非递归算法总结
- 快速排序(递归及非递归算法源码)