c语言:二叉树的创建、前序遍历、中序遍历、后续遍历

代码中创建的二叉树如下图

在这里插入图片描述

013##4##25##6##

代码:

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

typedef struct Tree{
    int value;
    struct Tree* lchild;
    struct Tree* rchild;
} Tree;

// 创建节点
Tree* Tree_createnode(int value){
    Tree* node = (Tree* )malloc(sizeof(Tree));
    node->value = value;
    node->lchild = NULL;
    node->rchild = NULL;
    return node;
}

// 创建二叉树
Tree* Tree_createtree(){
    Tree* root = NULL;
    char ch;
    scanf("%c", &ch);
    if(ch == '#') return root;
    else{
        root = Tree_createnode(ch - '0');
        root->lchild = Tree_createtree();
        root->rchild = Tree_createtree();
    }
    return root;
}

// 前序遍历

void Tree_preorder(Tree* root){

    if(root != NULL){
        printf("[%d] -> ", root->value);
        Tree_preorder(root->lchild);
        Tree_preorder(root->rchild);
    }

}

// 中序遍历

void Tree_inorder(Tree* root){
    
    if(root != NULL){
        Tree_inorder(root->lchild);
        printf("[%d] -> ", root->value);  
        Tree_inorder(root->rchild);
    }

}


// 后序遍历

void Tree_postorder(Tree* root){
    
    if(root != NULL){
        Tree_postorder(root->lchild);
        Tree_postorder(root->rchild);
        printf("[%d] -> ", root->value);
    }

}

int main(){
 
    printf("创建二叉树:\n");

    Tree* root = Tree_createtree();

    printf("前序遍历二叉树:\n");
    Tree_preorder(root);
    printf("NULL\n");
    
    printf("中序遍历二叉树:\n");
    Tree_inorder(root);
    printf("NULL\n");

    printf("后续遍历二叉树:\n");
    Tree_postorder(root);
    printf("NULL\n");

    return 0;
}

这三种遍历如何区分?其实是按头节点的打印顺序,前序遍历即头结点先被打印,中序遍历次之,后续遍历即最后打印头结点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值