二叉树一点操作

发布时间 2023-04-03 11:02:52作者: 南无return0
#include <stdio.h>
#include <stdlib.h>
typedef struct Tree{
    int data;
    struct Tree *lchild,*rchild;
}Tree,*BiTree;

BiTree CreateLink(){
    int data;
    int temp;
    BiTree T;
    scanf("%d",&data);
    temp = getchar();
    if(data == -1)
    return NULL;
    else{
        T = (BiTree)malloc(sizeof(Tree));
        T->data = data;
         printf("请输入%d的左子树\n",data);
         T->lchild = CreateLink();
         printf("请输入%d的右子树\n",data);
         T->rchild = CreateLink();
         return T;
    }
}
void firstbl(BiTree T){
    if(T == NULL){
        return;
    }
    printf("%d ",T->data);
    firstbl(T->lchild);
    firstbl(T->rchild);
}
void betweenbl(BiTree T){
    if(T == NULL){
        return;
    }
    betweenbl(T->lchild);
    printf("%d ", T->data);
    betweenbl(T->rchild);
}
void lastbl(BiTree T){
    if(T == NULL){
        return;
    }
    lastbl(T->lchild);
    lastbl(T->rchild);
    printf("%d ", T->data);
}
int depth(BiTree T) {
    if (T == NULL) {
        return 0;
    }
    int ldepth = depth(T->lchild);
    int rdepth = depth(T->rchild);
    return (ldepth > rdepth) ? (ldepth + 1) : (rdepth + 1);
}
int main()
{
    int de;
    BiTree S;
    printf("请输入第一个节点的数据:\n");
    S = CreateLink();
    printf("先序遍历的结果为:\n");
    firstbl(S);
    printf("\n");
    printf("中序遍历的结果为:\n");
    betweenbl(S);
    printf("\n");
    printf("后序遍历的结果为:\n");
    lastbl(S);
    printf("\n");
    de = depth(S);
    printf("此二叉树的深度为:%d ",de);
    return 0;
}