/**
* 实验题目:
* 求二叉树中从根结点到叶子结点的路径
* 实验目的:
* 掌握二叉树遍历算法的应用,熟练使用先序、中序、后序3种递归
* 和非递归遍历算法以及层次遍历算法进行二叉树问题求解。
* 实验内容:
设计程序,完成如下功能:
* 1、采用先序遍历方法输出所有从叶子结点到根结点的逆路径
* 2、采用先序遍历方法输出第一条最长的逆路径
* 3、采用后序非递归遍历方法输出所有从叶子结点到根结点的逆路径
* 4、采用层次遍历方法输出所有从叶子结点到根结点的逆路径
*/
#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef char ElemType;
typedef struct node
{
ElemType data; // 数据元素
struct node *lchild; // 指向左孩子结点
struct node *rchild; // 指向右孩子结点
}BTNode; // 声明二叉链结点类型
/*-------------由括号表示串str创建二叉链b-----------------*/
static void create_btree(BTNode *&b, char *str) // 创建二叉树(形参b:指针的引用)
{
BTNode *p;
BTNode *St[MAX_SIZE]; // 定义一个顺序栈
int k;
int j = 0;
int top = -1; // 栈顶指针初始化
char ch;
b = NULL; // 建立的二叉树初始时为空
ch = str[j]; // 取第一个字符
while(ch != '\0') // str未扫描完时循环
{
switch(ch)
{
case '(': // 开始处理左子树
top++;
St[top] = p;
k = 1;
break;
case ')': // 子树处理完毕
top--;
break;
case ',': // 开始处理右子树
k = 2;
break;
default:
p = (BTNode *)malloc(sizeof(BTNode)); // 动态分配结点p的存储空间
p->data = ch;
p->lchild = p->rchild = NULL;
if(b == NULL) // 若b为空,p置为二叉树的根结点
b = p;
else // 已建立二叉树根结点
{
switch(k)
{
case 1:
St[top]->lchild = p;
break;
case 2:
St[top]->rchild = p;
break;
}
}
break;
&nbs