数据结构-静态链式二叉树程序
Posted 坏坏-5
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-静态链式二叉树程序相关的知识,希望对你有一定的参考价值。
原二叉树
/*
链式二叉树
*/
# include <stdio.h>
# include <malloc.h>
struct BTNode * CreatBTree(void); //创建静态二叉树
void PreTraverseBTree(struct BTNode *); //先序遍历二叉树
void InTraverseBTree(struct BTNode *); //中序遍历二叉树
void PostTraverseBTree(struct BTNode *); //后续遍历二叉树
/*创建节点*/
struct BTNode
{
char data;
struct BTNode * pLchild; //左节点
struct BTNode * pRchild; //右节点
};
int main(void)
{
struct BTNode * pT = CreatBTree(); //创建二叉树
printf("----------先序输出----------\\n");
PreTraverseBTree(pT); //先序输出
printf("\\n----------中序输出----------\\n");
InTraverseBTree(pT); //中序输出
printf("\\n----------后序输出----------\\n");
PostTraverseBTree(pT); //后续输出
return 0;
}
struct BTNode * CreatBTree(void)
{
struct BTNode * pA = (struct BTNode *)malloc(sizeof(struct BTNode));
struct BTNode * pB = (struct BTNode *)malloc(sizeof(struct BTNode));
struct BTNode * pC = (struct BTNode *)malloc(sizeof(struct BTNode));
struct BTNode * pD = (struct BTNode *)malloc(sizeof(struct BTNode));
struct BTNode * pE = (struct BTNode *)malloc(sizeof(struct BTNode));
pA->data = 'A';
pB->data = 'B';
pC->data = 'C';
pD->data = 'D';
pE->data = 'E';
pA->pLchild = pB;
pA->pRchild = pC;
pB->pLchild = pB->pRchild = NULL;
pC->pLchild = pD;
pC->pRchild = NULL;
pD->pLchild = NULL;
pD->pRchild = pE;
pE->pLchild = pE->pRchild = NULL;
return pA;
}
/*先序输出*/
void PreTraverseBTree(struct BTNode * pT)
{
/*
先访问根节点
再先序访问左子树
最后先序访问右子树
*/
if (NULL != pT)
{
/*遍历根节点*/
printf("%c ", pT->data);
/*当左子树不为空时调用先序遍历*/
if (NULL != pT->pLchild)
PreTraverseBTree(pT->pLchild);
/*当右子树不为空时调用先序遍历*/
if (NULL != pT->pRchild)
PreTraverseBTree(pT->pRchild);
}
}
/*中序输出*/
void InTraverseBTree(struct BTNode * pT)
{
/*
先序访问左子树
再访问根节点
最后先序访问右子树
*/
if (NULL != pT)
{
/*当左子树不为空时调用中序遍历*/
if (NULL != pT->pLchild)
InTraverseBTree(pT->pLchild);
/*遍历根节点*/
printf("%c ", pT->data);
/*当右子树不为空时调用中序遍历*/
if (NULL != pT->pRchild)
InTraverseBTree(pT->pRchild);
}
}
/*后序输出*/
void PostTraverseBTree(struct BTNode * pT)
{
/*
先序访问左子树
然后先序访问右子树
最后访问根节点
*/
if (NULL != pT)
{
/*当左子树不为空时调用后序遍历*/
if (NULL != pT->pLchild)
PostTraverseBTree(pT->pLchild);
/*当右子树不为空时调用后序遍历*/
if (NULL != pT->pRchild)
PostTraverseBTree(pT->pRchild);
/*遍历根节点*/
printf("%c ", pT->data);
}
}
/*运行结果*/
----------先序输出----------
A B C D E
----------中序输出----------
B A D E C
----------后序输出----------
B E D C A Press any key to continue . . .
以上内容均属原创,如有不详或错误,敬请指出。
本文链接: https://blog.csdn.net/qq_45668124/article/details/117386320
版权声明: 本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0 许可协议。转载请联系作者注明出处并附带本文链接!
以上是关于数据结构-静态链式二叉树程序的主要内容,如果未能解决你的问题,请参考以下文章
数据结构初阶第八篇——二叉树的链式结构(二叉树的前中和后序遍历+层序遍历+链式结构的实现+相关简单的递归问题)