【算法一】用一棵二叉树T的用前序序列和后序序列判定结点N1是否为N2的祖先
检查前序序列,如果N1在N2前面,就标定tag1为1,检查后序序列,如果N1在N2的后面,就标定tag2为1
【代码】
#include <stdlib.h>
#include <stdio.h>
#define maxsize 100
// 定义结点类型
typedef struct btnode
{
int data;
struct btnode *lchild, *rchild;
} btnode;
FILE *fp;///使用文件读取数据
//二叉树
btnode* creat_bitree()
{
char a;
fscanf(fp, "%c", &a);
btnode *node = NULL;
if (a != '0')
{
node = (btnode *)malloc(sizeof(btnode));
node->data = a;
node->lchild = creat_bitree();
node->rchild = creat_bitree();
}
return node;
}
int tag1, tag2;
void Check(btnode *bt,char N1,char N2)
{
if (bt)
{
if (bt->data == N1)
{
tag1 = 0;
}
if(bt->data == N2)
{
tag1 = 1;
}
Check(bt->lchild, N1, N2);
Check(bt->rchild, N1, N2);
if (bt->data == N2)
{
tag2 = 0;
}
if (bt