数据结构二叉树深入理解,对二叉树进行递归操作,即根据三种遍历方法对做出二叉树图

#pragma once
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>

遍历二叉树是对二叉树所有节点操作的一个重要算法,二叉树经常用于系统

首先明白,二叉树的三种遍历方式

题目:前序:A_CDEF_H_J

中序:C_EDA_GFI_

后序:C_ _BHGJI_ A

根据这三种顺序利用三种遍历方法,将里边的空填完整,并且做出二叉树图,再用层次遍历进行遍历。

1.前序遍历(根左右)

2.中序遍历(左根右)

3.后序遍历(左右根)

题解:根据三种遍历方式来进行对二叉树创建节点

图片为解析:

下面是对二叉树三种遍历方式用相关代码进行实现

typedef struct BTNode
{
    int data;
    struct    BTNode* left;
    struct    BTNode* right;
}BTNode;
BTNode* buybtnode(int data)
{
    BTNode* bynew = (BTNode*)malloc(sizeof(BTNode));
    if (bynew == NULL)
    {
        return NULL;
    }
    bynew->data = data;
    bynew->left= NULL;
    bynew->right = NULL;
    return bynew;
}//此方法为手动输入结点

void createBiTree(BTNode* T)
{
    char c;
    scanf("%s", &c);
    if ('#' == c)
        T = NULL;
    else
    {
        T = new BTNode;
        T->data = c;
        createBiTree(T->left);
        createBiTree(T->right);
    }//此方法利用递归的方法来创建结点
}
//遍历
void prevorder(BTNode* root)//前序遍历
{
    if (root == NULL)
    {
        printf("NULL ");
        return;
    }
    printf("%d ", root->data);
    prevorder(root->left);
    prevorder(root->right);
}

//中序遍历
void Inorder(BTNode* root)//中序遍历
{
    if (root == NULL)
    {
        printf("NULL ");
        return;
    }
    prevorder(root->left);
    printf("%d", root->data);//中序在中
    prevorder(root->right);
}
//中序遍历原理,首先去除根节点,对左子树进行遍历,然后,返回根节点对右节点进行遍历.在中序遍历中,
//每次遍历到根节点会把根节点去除,遍历当前子树右节点,最后返回根节点,接着遍历此根结点的右节点
// 
// 
// 
// 
//前序遍历:首先访问根节点,然后访问左子树,最后访问右子树。
//②中序遍历的方式是:首先访问左子树,接着访问根结点,最后访问右子树。
//③后序遍历的方式是:首先访问左子树,接着访问右子树,最后访问根结点。

/*输出树结点*/
void visit(BTNode* T)
{
    printf("树结点的值:%c\n", T->data);
}
void PostOrder(BTNode *T)//后序遍历
{
    if (T != NULL)
    {
        PostOrder(T->left);    // 遍历结点左子树
        PostOrder(T->right);    // 遍历结点右子树
        visit(T);                // 访问结点

  1.     }

}

#include"二叉树前序遍历.h"
int main()
{
    BTNode* T = NULL;
    createBiTree(T);
    prevorder(T);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值