用递归实现二叉树的建立与遍历

内容简介:

  此次作业在建立二叉树时采用先序输入的方法,遍历时则采用先序,中序,后序三种方法。

  注:建立二叉树时,以输入的字符为"#"为结束。

  此次的二叉树结构为:

 1.二叉树的建立: 

void createBiTree(PTree *p)//建立二叉树
  {
     char ch;
     scanf("%c", &ch);
     getchar();//此时%c读取的是单个字符,所以用getchar来接收一下
     if(ch == '#')//结束条件
          *p = NULL;
     else
     {
         *p = (PTree)malloc(sizeof(Tree));
         (*p) -> ch = ch;
         printf("请输入%c的左子树\n", ch);
        createBiTree(&(*p) -> lchild);
        printf("请输入%c的右子树\n", ch);
         createBiTree(&(*p) -> rchild);
     }
 
 }

2.二叉树的遍历:

(1)先序遍历

void preOrderTraverse(PTree p)//先序遍历
 {
     if(p == NULL)
         return ;
     printf("%c ", p -> ch);
     preOrderTraverse(p -> lchild);
     preOrderTraverse(p -> rchild);
 }

(2)中序遍历

void InOrderTraverse(PTree p)//中序遍历
 {
     if(p == NULL)
         return;
     InOrderTraverse(p -> lchild);
     printf("%c ", p -> ch);
          InOrderTraverse(p -> rchild);
 }

(3)后序遍历

void BackOrderTraverse(PTree p)//后续遍历
 {
     if(p == NULL)
         return ;
     BackOrderTraverse(p -> lchild);
     BackOrderTraverse(p -> rchild);
     printf("%c ", p -> ch);
 }

3.主函数:

int main()
 {
     PTree pt;
     createBiTree(&pt);
     printf("先序遍历:"); 
     preOrderTraverse(pt);
     printf("\n");
     printf("中序遍历:");
     InOrderTraverse(pt);
     printf("\n");
     printf("后序遍历:");
     BackOrderTraverse(pt);
     printf("\n");
     return 0;
 }

4.运行结果:

 

5.总结:

  此次建立二叉树采用了先序输入的方式,从左到右依次建立子树,并使用递归依次进行先,中,后序遍历,参考了ppt上的相关算法,但使用的方法好像较为重复和麻烦,还要提升自己编程的能力。

猜你喜欢

转载自www.cnblogs.com/LHerr/p/10779559.html