非递归先序遍历二叉树

绝地灬酷狼 2022-06-15 00:18 302阅读 0赞
  1. /*非递归先序遍历二叉树*/
  2. #include<stdio.h>
  3. #define maxsize 100
  4. typedef char datatype;
  5. /*二叉链表类型定义*/
  6. typedef struct Binnode
  7. {
  8. datatype data; /*数据域*/
  9. struct BinNode* lchild,*rchild; /*指向左、右孩子的指针*/
  10. }BinNode,*Bintree;
  11. /*按先序创建二叉树*/
  12. Bintree CreateTree(Bintree T)
  13. {
  14. datatype ch;
  15. scanf("%c",&ch);
  16. if(ch=='#')
  17. return NULL;
  18. else
  19. {
  20. T=(Bintree)malloc(sizeof(BinNode));
  21. T->data=ch;
  22. T->lchild=CreateTree(T->lchild);/*创建左子树*/
  23. T->rchild=CreateTree(T->rchild);/*创建右子树*/
  24. return T;
  25. }
  26. }
  27. /*非递归先序遍历二叉树*/
  28. void preorder(Bintree T)
  29. {
  30. Bintree st[maxsize],p;
  31. int top=-1;
  32. if(T!=NULL)
  33. {
  34. top++; /*根节点进栈*/
  35. st[top]=T;
  36. while(top>-1) /*栈不为空时循环*/
  37. {
  38. p=st[top]; /*退栈并访问该节点*/
  39. top--;
  40. printf("%c ",p->data);
  41. if(p->rchild!=NULL) /*右孩子节点进栈*/
  42. {
  43. top++;
  44. st[top]=p->rchild;
  45. }
  46. if(p->lchild!=NULL) /*左孩子节点进栈*/
  47. {
  48. top++;
  49. st[top]=p->lchild;
  50. }
  51. }printf("\n");
  52. }
  53. }
  54. main()
  55. {
  56. Bintree t;
  57. printf("请按先序的方式输入二叉树的结点元素(注:#表示节点为空):");
  58. t=CreateTree(t);
  59. printf("非递归先序遍历二叉树:");
  60. preorder(t);
  61. }

发表评论

表情:
评论列表 (有 0 条评论,302人围观)

还没有评论,来说两句吧...

相关阅读