首页 > 代码库 > 二叉树遍历的非递归实现
二叉树遍历的非递归实现
二叉树的非递归实现需要使用到下推栈,下面给出前序遍历的完整代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAX 10 4 5 6 //二叉树存储结构定义 7 typedef char Item; 8 typedef struct node *link; 9 struct node {Item item; link l, r;};10 11 int Create(link *tp);12 void show(link h);13 void tranverse(link h, void (*visit)(link));14 15 //下推栈存储结构定义16 typedef link SItem;17 static SItem *s;18 static int N;19 20 void STACKinit(int maxN);21 int STACKempty();22 void STACKpush(SItem item);23 SItem STACKpop();24 25 26 int main()27 {28 link tree;29 30 Create(&tree);31 tranverse(tree, show);32 33 return 0;34 }35 36 void STACKinit(int maxN)37 {38 s = (SItem *)malloc(maxN * sizeof(SItem));39 if (!s) return;40 N = 0;41 }42 43 int STACKempty()44 {45 return N==0;46 }47 48 void STACKpush(SItem item)49 {50 s[N++] = item;51 }52 53 SItem STACKpop()54 {55 return s[--N];56 }57 58 int Create(link *tp)59 {60 //构造方法,或者说构造顺序:中序遍历构造61 char x;62 scanf("%c",&x);63 if(x==‘#‘)64 {65 *tp=NULL;//指针为空,树节点中的某个指针为空66 return 0;67 }68 *tp=(link)malloc(sizeof(**tp));//将树节点中指针指向该地址空间69 if(*tp==NULL)70 return 0;71 (*tp)->item=x;72 Create(&((*tp)->l));73 Create(&((*tp)->r));74 return 1;75 }76 77 void show(link h)78 {79 printf(" %c ", h->item);80 }81 82 //前序遍历83 void tranverse(link h, void (*visit)(link))84 {85 STACKinit(MAX);86 STACKpush(h);87 while (!STACKempty()){88 (*visit)(h = STACKpop());89 if (h->r != NULL) STACKpush(h->r);90 if (h->l != NULL) STACKpush(h->l);91 }92 }
二叉树遍历的非递归实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。