根据输入的二叉树前序序列(以单个字符作为一个结点的信息)和中序序列,来构造一棵二叉树,然后输出该树的后序序列,以及该树中所有度为1的结点。
#include<stdio.h>
#include <malloc.h>
typedef struct LinkList
{
char data;
LinkList* lchild;
LinkList* rchild;
}BiNode,*BiTree;
BiTree createBiTree(BiTree &T)
{
char d = getchar();
if (d == '#')
T = NULL;
else
{
T = (BiTree)malloc(sizeof(BiNode));
T->data = d;
T->lchild = createBiTree(T->lchild);
T->rchild = createBiTree(T->rchild);
}
return T;
}
void PostOrder(BiTree T)//后序
{
if (T)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
void printOnce(BiTree T)
{
if (T == NULL) return;
if ((T->lchild == NULL && T->rchild != NULL) || (T->lchild != NULL && T->rchild == NULL))
{
printf("%c ", T->data);
}
printOnce(T->lchild);
printOnce(T->rchild);
}
int main()
{
BiTree T=NULL;
printf("输入先序遍历结点,建立二叉树\n");
T = createBiTree(T);
printf("后序遍历结果:\n");
PostOrder(T);
printf("\n输出所有度数为一的结点:\n");
printOnce(T);
}
运行效果
有人写了类似的
https://bbs.csdn.net/topics/600462867