先序创建二叉树及三种遍历

来源:互联网 发布:linux安装mysql报错 编辑:程序博客网 时间:2024/06/05 01:52
#include<stdio.h>#include<stdlib.h>int max = 0;struct node{    int data;    struct node *left;    struct node *right;};struct node *create(struct node *newNode){//先序创建二叉树     char data;    scanf("%c",&data);    if(data == '#'){        newNode = NULL;    }else{        newNode = (struct node *)malloc(sizeof(struct node));        newNode->data = data;        newNode->left = create(newNode->left);        newNode->right = create(newNode->right);    }    return newNode;} void PreOrderTraversal(struct node *tree){//先序遍历     if(tree){        printf("%c",tree->data);        PreOrderTraversal(tree->left);        PreOrderTraversal(tree->right);     }}void InOrderTraversal(struct node *tree){//中序遍历     if(tree){        InOrderTraversal(tree->left);        printf("%c",tree->data);        InOrderTraversal(tree->right);     }}void PostOrderTraversal(struct node *tree){//后序遍历     if(tree){        PostOrderTraversal(tree->left);        PostOrderTraversal(tree->right);        printf("%c",tree->data);     }}void leaf(struct node *tree){//从左到右输出叶子结点     if(tree){        if(tree->left==NULL && tree->right==NULL){            printf("%c",tree->data);         }         leaf(tree->left);        leaf(tree->right);      }}void deep(struct node *tree,int step){//树的深度     if(tree){        if(step > max){            max = step;        }        deep(tree->left,step+1);        deep(tree->right,step+1);    }} int main(){    struct node *tree = NULL;    tree = create(tree);    if(tree){        PreOrderTraversal(tree);printf("\n");        InOrderTraversal(tree);printf("\n");        PostOrderTraversal(tree); printf("\n");        leaf(tree); printf("\n");        deep(tree,1);        printf("%d",max);    }else{        printf("NULL");     }    return 0;} 
0 0