【06】先序遍历建立二叉树,并进行三种遍历

main函数

int main()
{ Bitree* T=NULL;
  printf("输入二叉树的先序遍历结点,建立二叉树。(子树为空时输入@)\n");
  T=CreateBtree_DLR(T);

  printf("\n先序遍历的结果:\n");
  PreOrder(T);
  printf("\n中序遍历的结果:\n");
  InOrder(T);
  printf("\n后序遍历的结果:\n");
  PostOrder(T);
return 0;
}

先序遍历建立二叉树

Bitree* CreateBtree_DLR(Bitree* root)
{ char ch;
  scanf("%c",&ch);
  if(ch=='@')
  root=NULL;
  else
  {
  root=(Bitree*)malloc(sizeof(Bitree));
  root->data=ch;
  root->lchild=CreateBtree_DLR(root->lchild); //构造左子树
      root->rchild=CreateBtree_DLR(root->rchild); //构造右子树
  }
  return(root);
}

通过循环调用建立二叉树

void PreOrder(Bitree* T)    //先序遍历二叉树
{
   if ( T!=NULL ) 
    {  printf("%c ",T->data);
       PreOrder(T->lchild);
       PreOrder(T->rchild);
    }
}
void InOrder(Bitree* T)    //中序遍历二叉树
{
   if ( T!=NULL ) 
    {   InOrder(T->lchild);
		printf("%c ",T->data);       
        InOrder(T->rchild);
    }
}
void PostOrder(Bitree* T)    //后序遍历二叉树
{
   if ( T!=NULL ) 
    {   PostOrder(T->lchild); 
        PostOrder(T->rchild);
        printf("%c ",T->data);   
    }
}

全部代码

#include <stdio.h>
#include <stdlib.h>
typedef char Elemetype;

typedef struct BiTNode    //定义二叉链表的结构体
{  Elemetype data;
   struct BiTNode *lchild,*rchild;
 }Bitree;
Bitree* CreateBtree_DLR(Bitree* root); //以先序遍历建立二叉树
void PreOrder(Bitree* T);    //先序遍历二叉树
void InOrder(Bitree* T);    //中序遍历二叉树
void PostOrder(Bitree* T); //后序遍历二叉树

int main()
{ Bitree* T=NULL;
  printf("输入二叉树的先序遍历结点,建立二叉树。(子树为空时输入@)\n");
  T=CreateBtree_DLR(T);

  printf("\n先序遍历的结果:\n");
  PreOrder(T);
  printf("\n中序遍历的结果:\n");
  InOrder(T);
  printf("\n后序遍历的结果:\n");
  PostOrder(T);
return 0;
}
Bitree* CreateBtree_DLR(Bitree* root)
{ char ch;
  scanf("%c",&ch);
  if(ch=='@')
  root=NULL;
  else
  {
  root=(Bitree*)malloc(sizeof(Bitree));
  root->data=ch;
  root->lchild=CreateBtree_DLR(root->lchild); //构造左子树
      root->rchild=CreateBtree_DLR(root->rchild); //构造右子树
  }
  return(root);
}
void PreOrder(Bitree* T)    //先序遍历二叉树
{
   if ( T!=NULL ) 
    {  printf("%c ",T->data);
       PreOrder(T->lchild);
       PreOrder(T->rchild);
    }
}
void InOrder(Bitree* T)    //中序遍历二叉树
{
   if ( T!=NULL ) 
    {   InOrder(T->lchild);
		printf("%c ",T->data);       
        InOrder(T->rchild);
    }
}
void PostOrder(Bitree* T)    //后序遍历二叉树
{
   if ( T!=NULL ) 
    {   PostOrder(T->lchild); 
        PostOrder(T->rchild);
        printf("%c ",T->data);   
    }
}

运行结果
在这里插入图片描述
在这里插入图片描述
看完点赞,谢谢!

猜你喜欢

转载自blog.csdn.net/The_Handsome_Sir/article/details/106260876