|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
using namespace std;
struct node {
int data;
node* firstChild;
node* nextBrother;
};
node* CreateTree()
{
int k;
scanf("%d", &k);
if (k == 0) return NULL;
node *t = new node;
t->data = k;
t->firstChild = CreateTree();
t->nextBrother = CreateTree();
return t;
}
void Del(node* root)
{
if (root == NULL) return;
node* p = root->firstChild;
node* next;
while (p != NULL){
next = p->nextBrother;
Del(p);
p = next;
}
delete root;
}
/* 你的代码将出现在这里 */
int main()
{
int a, b, T;
scanf("%d", &T);
while(T--){
node *root = CreateTree();
scanf("%d %d", &a, &b);
printf("%d\n", LeastCommonAncestors(root, a, b));
Del(root);
}
return 0;
}
在本题中你无需编写整个程序,只需实现如下函数
int LeastCommonAncestors(node *root, int a, int b);
这道题只让写目标函数,他把一个树存储成了二叉树,但是寻找祖先的时候要当成普通树去看,该如何进行程序的书写
每个测试点包含多组数据,第1行为一个正整数T,表示数组组数。每组数据为2行,第1行为一组用空格间隔的整数,个数不超过100个,表示带空指针信息的二叉树先根序列。其中空指针信息用0表示。第2行为空格间隔的两个互不相等的整数A和B,表示给定的两个结点值,保证A和B肯定在输入的树中。
注1:我们已知二叉树与其自然对应的树相比,二叉树中结点的左孩子对应树中结点的左孩子,二叉树中结点的右孩子对应树中结点的右兄弟。进而我们可以利用“带空指针信息的先根序列构建二叉树”的方法来构建其对应的树的左孩子-右兄弟存储结构。如8 5 1 0 6 0 2 0 0 3 4 0 0 7 0 0 0对应图1(a)所示的树,1 2 0 3 0 4 0 0 0对应如图1(b)所示的树。
注2:本题中读入数据的操作无需你来完成,而由框架程序完成。 |
|