二叉树的递归遍历

矫情吗;* 2022-03-28 14:20 285阅读 0赞

二叉树的递归遍历

简单递归遍历二叉树.

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define OK 1
  4. #define ERROR 0
  5. #define OVERFLOW -1
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define SIZEINIT 10
  9. #define INCRESIZE 5
  10. typedef int Status;
  11. typedef char TElemType;
  12. typedef struct node{
  13. TElemType data;
  14. struct node *lchild,*rchild;
  15. }BiTNode,*BiTree;
  16. //前序创建二叉树
  17. void CreateBiTree(BiTree &T){
  18. char ch;
  19. scanf("%c",&ch);
  20. if(ch=='#'){
  21. T = NULL;
  22. }else{
  23. T = (BiTree)malloc(sizeof(struct node));
  24. T->data = ch;
  25. CreateBiTree(T->lchild);
  26. CreateBiTree(T->rchild);
  27. }
  28. }
  29. //前序遍历
  30. Status PreOrderTraverse(BiTree T,Status (*Visit)(TElemType e)){
  31. if(T){
  32. if(Visit(T->data)){
  33. if(PreOrderTraverse(T->lchild,Visit)){
  34. if(PreOrderTraverse(T->rchild,Visit)) return OK;
  35. }
  36. }
  37. return ERROR;
  38. }
  39. return OK;
  40. }
  41. //中序遍历
  42. Status InOrderTraverse(BiTree T,Status (*Visit)(TElemType e)){
  43. if(T){
  44. if(InOrderTraverse(T->lchild,Visit)){
  45. if(Visit(T->data)){
  46. if(InOrderTraverse(T->rchild,Visit)) return OK;
  47. }
  48. }
  49. return ERROR;
  50. }
  51. return OK;
  52. }
  53. //后序遍历
  54. Status PostOrderTraverse(BiTree T,Status (*Visit)(TElemType e)){
  55. if(T){
  56. if(PostOrderTraverse(T->lchild,Visit)){
  57. if(PostOrderTraverse(T->rchild,Visit)){
  58. if(Visit(T->data)) return OK;
  59. }
  60. }
  61. return ERROR;
  62. }
  63. return OK;
  64. }
  65. //访问函数
  66. Status Visit(TElemType e){
  67. printf("%c",e);
  68. return OK;
  69. }
  70. int main(){
  71. BiTree T = NULL;
  72. printf("请前序创建第一棵树(空位置用'#'来代替)\n");
  73. CreateBiTree(T);
  74. printf("\n二叉树前序遍历的结果\n");
  75. PreOrderTraverse(T,Visit);
  76. printf("\n二叉树中序遍历的结果\n");
  77. InOrderTraverse(T,Visit);
  78. printf("\n二叉树后序遍历的结果\n");
  79. PostOrderTraverse(T,Visit);
  80. printf("\n");
  81. return 0;
  82. }
  83. //AB#D##CE###

发表评论

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

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

相关阅读

    相关

    网上的递归遍历代码很多,这里就不赘述了,说一下思考的角度: 1. 把每一个棵子树都看成是独立的树; 2. 每一个节点都会把递归的代码重新执行一次; 3. 想象压栈的过程

    相关

    二叉树又称为红黑树,是一种常用的数据结构,而二叉树的遍历则是一种非常基本的操作。遍历二叉树的方式有两大类:递归和非递归。递归方式算法较为简便,并且更便于理解,非递归方式则需要对