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

#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);
}

猜你喜欢

转载自blog.csdn.net/qq_41832361/article/details/89762845