编程可以和任何你能想象出来的东西有关,集合在数据结构里面关系比较大,比如结构体就是一个集合。
堆是一种数据结构,常用于堆排序算法。
对于你的这种情况我觉得比较适合用数组来实现。对于长度为t的输入,申请类型为Node、长度为t的数组nodeArray[t],然后进行两次遍历。第一次,nodeArray[i].data对应输入的第i个字符,nodeArray[i].lchild和rchild都为空;(如果输入#则nodeArray[i]=null)第二次,在[0,n-1]的范围内,令nodeArray[i].lchild=&(nodeArray[i*2]),nodeArray[i].rchild=&(nodeArray[i*2+1])。完成后,nodeArray[0]即为所求二叉树。应该有法一次遍历就构造好这棵树,懒得想了。//将你二叉树中的数据放入链表中typedef struct node {//这可能是一个单向链表
DateType data;
Struct node * next;
}ListNode;
typedef ListNode * LinkList ;
LinkList Leafhead=NULL;//创键链表
Void Inorder (BinTree T)
{
LinkList s;
If(T){//T不能空时。
Inorder(T->lchild);//递归左孩子
If ((!T->lchild)&&(!T->rchild)){//当左右孩子都为空时。将里面的数据放入链表!
s=(ListNode*)malloc(sizeof(ListNode));
s->data=T->data;//将所有的数据放入链表中
s->next=Leafhead;
Leafhead=s;
}
Inorder(T->rchild);// 递归右孩子
}
}