【问题描述】
假设二叉树采用二叉链表方式存储,root指向根结点,p所指结点和q所指结点为二叉树中的两个不同结点,且互不成为根到该结点的路径上的点,编程求解距离它们最近的共同祖先。
【输入形式】
二叉树的前序和中序遍历序列,用以创建该二叉树的链式存储结构;以及二叉树的两个结点数据 x 和 y
【输出形式】
结点数据值为 x 和结点数据值为 y 的最近的共同祖先,若没有共同祖先则输出NULL
【样例输入】
GABDCEF
BDAEFCG
DF
【样例输出】
A
#include <bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
node *Lchild;
node *Rchild;
}*pnode,snode;
pnode creattree(int x1,int x2,int z1,int z2,string s1,string s2,pnode *NODE)
{
if(x1>x2)
return NULL;//递归终点,s1串遍历完
*NODE=new node;
(*NODE)->data=s1[x1];
int k=0;
for(int i=z1; i<z2+1; i++)
{
if(s1[x1]==s2[i])
{
k=i;
break;
}
}
(*NODE)->Lchild=creattree(x1+1,x1+k-z1,z1,k-