#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); // 访问结点
- }
}
#include"二叉树前序遍历.h"
int main()
{
BTNode* T = NULL;
createBiTree(T);
prevorder(T);
return 0;
}