零、前言
打油诗
递归算法妙无穷,
递去归来自调用。
代码凝练脑清晰,
解难题时觉神奇。
一、题目要求
使用先序递归过程建立二叉树(存储结构:二叉链表),并用凹入法打印。
输入数据按照先序遍历所得序列输入,当某节点左子树或右子树为空时,输入“ * ”号。如输入ABC**D**E** 得到的二叉树为:
二、实现效果
先序序列:ABC**D**E**
先序序列:ABC*DE**FG****HI*J**K**
三、代码
先序构建二叉树:
BTNODE* CreateBiTree(void)
{
char ch;
scanf_s("%c", &ch);
if (ch == '*')
return NULL;
BTNODE* T = (BTNODE*)malloc(sizeof(BTNODE));
T->data = ch;
T->lc=CreateBiTree();
T->rc=CreateBiTree();
return T;
}
凹入法打印二叉树:
void PrintTabTab(BTNODE* T, int depth)
{
if (T)
{
for (int i = 0; i < depth; i++)
printf("__");
printf("%c\n", T->data);
PrintTabTab(T->lc, depth + 1);
PrintTabTab(T->rc, depth + 1);
}
}
四、递归过程
以先序序列 ABC**D**E** 为例,演示递归构建二叉树的全过程。
其中的四条伪代码分别表示:判断接收字符是否为“ * ”,赋值,递归左子树,递归右子树。