一个程序,求大大们帮忙修改啊!谢谢了

时间:2022-05-03 17:33:17
2.设一棵n个结点的完全二叉树采用顺序存储结构,保存在一维数组A中。试设计一个递归算法,复制该完全二叉树,得到一棵新的采用普通二叉链表存储的二叉树。二叉链表的每个结点有三个域:lchild,rchild和element.算法返回构造的新二叉树的根结点地址。
Void copyBT(BTree &T,int A[],int n)

While(A[i]!=0)
{
 element[T]=A[i];
 Element[T->lchild]=copy(T->lchild,A,n);
 Element[T->rchild]=copy(T->rchild,A,n);
}

哈哈,错误一定很多!可是我搞不出来

4 个解决方案

#1


看见数据结构恶心,不知道为什么,唉。。。

#2


O MY GOD

#3


看了楼主的题目简单的做了下
可能还有不完善的地方

#include<stdio.h>
#include<stdlib.h>
typedef int Element;

struct BNode{
struct BNode *leftChild;
struct BNode *rightChild;
Element e;
};
typedef BNode * Node;
struct BTree
{
//带头结点的树
Node first;
int count;
};
typedef BTree * Tree;

BTree *CreateBTree()
{
Tree t=(Tree)malloc(sizeof(struct BTree));
t->first=(Node)malloc(sizeof(struct BNode));
t->count=0;
return t;
}

//递归遍历
void copyBT(Tree T,int A[],int n,int i,Node p)
{
// i>n-1返回
if(i>n-1) return ;

if(A[i]!=0)
{
Node newNode =(Node)malloc(sizeof(struct BNode));
newNode->e=A[i];

// 左孩子
if(i%2==0)
p->leftChild=newNode;
else/*右孩子*/
p->rightChild=newNode;
p=newNode;
T->count++;
copyBT(T,A,n,2*i,p);
copyBT(T,A,n,2*i+1,p);
}
}
int main()
{
Tree t=CreateBTree();
//指向父节点
Node p=t->first;
int A[8]={0,1,2,3,4,5,6,7};
//数组我们从1开始。第一个默认为0。便于2*i和2*i+1操作
copyBT(t,A,8,1,p);
return 0;
}

#4


楼上的代码很清晰

#1


看见数据结构恶心,不知道为什么,唉。。。

#2


O MY GOD

#3


看了楼主的题目简单的做了下
可能还有不完善的地方

#include<stdio.h>
#include<stdlib.h>
typedef int Element;

struct BNode{
struct BNode *leftChild;
struct BNode *rightChild;
Element e;
};
typedef BNode * Node;
struct BTree
{
//带头结点的树
Node first;
int count;
};
typedef BTree * Tree;

BTree *CreateBTree()
{
Tree t=(Tree)malloc(sizeof(struct BTree));
t->first=(Node)malloc(sizeof(struct BNode));
t->count=0;
return t;
}

//递归遍历
void copyBT(Tree T,int A[],int n,int i,Node p)
{
// i>n-1返回
if(i>n-1) return ;

if(A[i]!=0)
{
Node newNode =(Node)malloc(sizeof(struct BNode));
newNode->e=A[i];

// 左孩子
if(i%2==0)
p->leftChild=newNode;
else/*右孩子*/
p->rightChild=newNode;
p=newNode;
T->count++;
copyBT(T,A,n,2*i,p);
copyBT(T,A,n,2*i+1,p);
}
}
int main()
{
Tree t=CreateBTree();
//指向父节点
Node p=t->first;
int A[8]={0,1,2,3,4,5,6,7};
//数组我们从1开始。第一个默认为0。便于2*i和2*i+1操作
copyBT(t,A,8,1,p);
return 0;
}

#4


楼上的代码很清晰