#include<stdio.h>
#include<stdlib.h> typedef struct node
{
  int data;
  struct node*lchild;
  struct node*rchild;
}BiTree;
//生成树
BiTree* CreateTree(BiTree* root, int x){
    if(!root){
        root = (BiTree*)malloc(sizeof(BiTree));
        root->data = x;
        root->lchild = root->rchild = NULL;
    }else{
        if(root->data>x){
            root->rchild = CreateTree(root->rchild, x);   
        }else{
            root->lchild = CreateTree(root->lchild, x);
        }
    }
    return root;
}
//先序遍历
void Preorder(BiTree*root){
    if(root){
        printf("%3d ",root->data);
        Preorder(root->lchild);
        Preorder(root->rchild);
    }
}
//中序遍历
void Inorder(BiTree*root){
    if(root){
        Inorder(root->lchild);
        printf("%3d ",root->data);
        Inorder(root->rchild);
    }
}
//后续遍历
void Porder(BiTree*root){
    if(root){
        Porder(root->lchild);
        Porder(root->rchild);
        printf("%3d ",root->data);
    }
} //主函数
int main (void){
    BiTree* root = NULL;
    int x;        //当前值
    int n;        //结点的个数
    int i;         //循环变量
    printf("请输入n=");
    scanf("%d",&n);
    printf("请输入二叉树的结点\n");
    for(i=0;i<n;i++)
    {
      scanf("%d",&x);
      root = CreateTree(root,x);
    }
 
    printf("\n先序遍历为:");
    Preorder(root);
    printf("\n中序遍历为:");
    Inorder(root);
    printf("\n后序遍历为:");
    Porder(root);
    printf("\n");
} 树

 

 

 

上一篇:二叉树的建立和遍历


下一篇:基本数据结构 -- 二叉查找树的插入、删除、查找和遍历