当前位置:   article > 正文

C语言创建二叉树(前序、中序、后续遍历)_编写c语言程序,对于给定的一棵二叉树,按先序次序编写函数 createbitree( bitr

编写c语言程序,对于给定的一棵二叉树,按先序次序编写函数 createbitree( bitr

C语言实现以下二叉树

前序遍历:先输出根节点,在遍历左子树,最后右子树(根、左、右)

中序遍历:先遍历左子树,在输出根节点,最后右子树(左、根、右) 

后序遍历:先遍历左子树,在遍历右子树,最后根节点(左、右、根)

代码如下(示例) :

  1. // 二叉树.cpp
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. //定义数据类型
  5. typedef char DataType;
  6. //定义二叉树
  7. typedef struct bittree {
  8. DataType data;
  9. struct bittree* lchild, * rchild; //左右子树节点指针
  10. }BinTree;
  11. //--------------函数声明---------------
  12. BinTree* CreateBinTree(BinTree* T); //前序创建二叉树
  13. void preOrder(BinTree* T); //前序遍历
  14. void InOrder(BinTree* T); //中序遍历
  15. void PostOrder(BinTree* T); //后序遍历
  16. //-------------------------------------
  17. int main()
  18. {
  19. BinTree* T = (BinTree*)malloc(sizeof(BinTree)); //创建二叉树
  20. T = CreateBinTree(T); //接受返回的根结点地址
  21. printf("前序遍历:");
  22. preOrder(T); //前序遍历
  23. printf("\n"); //换行
  24. printf("中序遍历:");
  25. InOrder(T); //中序遍历
  26. printf("\n"); //换行
  27. printf("后序遍历:");
  28. PostOrder(T); //后序遍历
  29. printf("\n"); //换行
  30. return 0;
  31. }
  32. //先序创建二叉树
  33. BinTree* CreateBinTree(BinTree *T) {
  34. char data;
  35. printf("请输入当前节点数据:data = ");
  36. scanf_s("%c", &data,1);
  37. getchar(); //用来接收缓冲区内的“回车"
  38. if (data == '#') {
  39. T = NULL; //判断:如果输入的字符串是“#”,将指向孩子节点的指针置空
  40. }
  41. else {
  42. T = (BinTree*)malloc(sizeof(BinTree)); //malloc动态分配内存
  43. if ( T == NULL ) {
  44. printf("分配空间失败\n");
  45. return 0;
  46. }
  47. T->data = data;
  48. T->lchild = CreateBinTree(T->lchild); //接收左孩子节点地址,存放进 T->lchild 左指针内
  49. T->rchild = CreateBinTree(T->rchild); //接收右孩子节点地址,存放进 T->rchild 右指针内
  50. }
  51. return T;
  52. }
  53. //前序遍历二叉树
  54. void preOrder(BinTree* T) {
  55. if (T)
  56. {
  57. printf("%c ", T->data); //输出根节点数据
  58. preOrder(T->lchild); //遍历左子树
  59. preOrder(T->rchild); //遍历右子树
  60. }
  61. }
  62. //中序遍历二叉树
  63. void InOrder(BinTree* T) {
  64. if (T) {
  65. InOrder(T->lchild ); //遍历左子树
  66. printf("%c ", T->data); //输出根节点数据
  67. InOrder(T->rchild ); //遍历右子树
  68. }
  69. }
  70. //后序遍历
  71. void PostOrder(BinTree* T) {
  72. if (T) {
  73. PostOrder(T->lchild); //遍历左子树
  74. PostOrder(T->rchild); //遍历右子树
  75. printf("%c ", T->data); //输出根节点数据
  76. }
  77. }

输入:AB#DG###CE#H##F##

输出:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/569950
推荐阅读
相关标签
  

闽ICP备14008679号