二叉树的前序,中序,后续遍历,及求二叉树节点的个数

本文介绍了如何进行二叉树的前序、中序和后序遍历,并提供了一个C语言实现的算法,同时展示了如何计算二叉树的节点数量。通过递归方法,分别实现了前序、中序和后序遍历的过程,对于空树、单节点树、左子树或右子树以及完整二叉树的情况进行了详细处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma once
#include<stdio.h>
#include<assert.h>
typedef struct Node{
    int value;
    struct Node *left;
    struct Node *right;
}Node;


分析过程:

以前序遍历为例:

void preorderTraversal(Node * root){
    //空数
    if (root == NULL){
        return;
    }
    printf("%d", root->value);
    if (root->left != NULL){
        preorderTraversal(root->left);
    }
    else{
        preorderTraversal(NULL);//空传进去没用,还是返回了空
    }
    if (root->right != NULL){
        preorderTraversal(root->right);
    }
    else{
    preorderTraversal(NULL);
    }


    //只有一个节点的数
    if (root->left == NULL&&root->right == NULL){
          return;
    }
    
    //只有根加左子树的数
    if (root->right == NULL){
            preorderTraversal(root->left);
            return;
    }
    
    //只有根加右子树的数
    if (root->left == NULL){
      preorderTraversal(root->right);
      return;
    }
    
    ////只有根+右子树+左子树的树
    preorderTraversal(root->right);
    preorderTraversal(root->left);
}
 

 

//前序遍历


void preorderTraversal(Node * root){
    //空数
    if (root == NULL){
        return;
    }
    printf("%d", root->value);
    preorderTraversal(root->left);
    preorderTraversal(root->right);
}

//中序遍历


void InOrder(Node *root){
    //空数
    if (root == NULL){
        return;
    }
    InOrder(root->left);
    printf("%d", root->value);
    InOrder(root->right);
}


//后序遍历


void AfterOrder(Node *root){
    //空数
    if (root == NULL){
        return;
    }
    AfterOrder(root->left);
    AfterOrder(root->right);
    printf("%d", root->value);
    
}


//求树中节点个数


int count = 0;
int  Size(Node *root){
    if (root == NULL){
        return 0;
    }
    count++;
    Size(root->left);
    Size(root->right);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值