二叉树

26 阅读1分钟
#include <stdio.h>
#include <stdlib.h>

typedef struct BinaryTree{
    char data;
    struct BinaryTree* leftChild;
    struct BinaryTree* rightChild;
}BiTree ;

BiTree* createTree(){
    BiTree* T;
    char input;
    scanf("%c",&input);
    if (input == '#') {
        T=NULL;
    }else {
        T=(BiTree*)malloc(sizeof(BiTree));
        T->data=input;
        T->leftChild=createTree();
        T->rightChild=createTree();
    }
    return T;
}

void preOrder(BiTree* T){
    if (T == NULL) {
        return;
    }else {
        printf("%c",T->data);        
        preOrder(T->leftChild);
        preOrder(T->rightChild);
    }
}

void inOrder(BiTree* T){
    if (T == NULL) {
        return;
    }else {
        inOrder(T->leftChild);
        printf("%c",T->data);        
        inOrder(T->rightChild);
    }
}
void postOrder(BiTree* T){
    if (T == NULL) {
        return;
    }else {
        postOrder(T->leftChild);
        postOrder(T->rightChild);
        printf("%c",T->data);        
    }
}
int main(){
    BiTree* T=createTree();
    preOrder(T);
    printf("\n");
    inOrder(T);
    printf("\n");
    postOrder(T);
    printf("\n");
    return 0;
}

二叉树使用二级指针

#include<stdio.h>
#include <stdlib.h>

typedef struct BiTree{
    char data;
    struct BiTree* leftChild;
    struct BiTree* rightChild;
}BiTree ;

void createTree(BiTree* *T){   //*T本质上是一个地址
    char ch;
    scanf("%c",&ch);
    if (ch == '#') {
       *T=NULL; 
    }else {
        (*T)=(BiTree*)malloc(sizeof(BiTree));
        (*T)->data=ch;
        createTree(&((*T)->leftChild));      //  (*T)->leftChild访问当前地址,结构体中的leftChild.leftChild嵌在头节点里
        createTree(&((*T)->rightChild));
    }
}

void preOrder(BiTree* T){ //为何传入BiTree* T???
    if (T == NULL) {
        return;
    }else {
        printf("%c",T->data);
        preOrder(T->leftChild);
        preOrder(T->rightChild);
    }
}
void inOrder(BiTree* T){
    if (T == NULL) {
        return;
    }else {
        inOrder(T->leftChild);
        printf("%c",T->data);
        inOrder(T->rightChild);
    }
}
void postOrder(BiTree* T){
    if (T == NULL) {
        return;
    }else {
        postOrder(T->leftChild);
        postOrder(T->rightChild);
        printf("%c",T->data);
    }
}
int main(){
    BiTree* T;
    createTree(&T);
    preOrder(T);
    printf("\n");
    inOrder(T);
    printf("\n");
    postOrder(T);
}