数据结构复习笔记(3)
2006-09-12 23:01
507 查看
1. 给定整型数组B[m]
,B中数据在每一维方向都按从小到大的次序排列,而且整型变量x在B中存在,找出一对满足B[i][j]==x的i和j,要求比较次数不超过m+n
分析:从右上角的元素B[i][j]开始与x比较,每次有3种情况:(1)相等,则比较结束;(2)B[i][j]<x,则这一行不包含x,搜索下一行;(3)B[i][j]>x,则这一列不包含x,搜索下一列;这样,每次至少使搜索范围减少一行或一列,最多经过m+n次就可以找到x.
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void SearchIndex(int B[M]
,int x,int &i,int &j)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int i = 0,j= N-1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(B[i][j]!=x)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(B[i][j]<x)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
j--;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2,将一维数组A[n*n](n<=10)中的元素,按蛇型方式存放在二维数组B
中,
A[0] A[1] A[5] A[6]。。。
A[2] A[4] A[7] A[13]。。。
A[3] A[8] A[12]。。。
B = A[9] A[11]。。。
A[10]。。。
分析:从B的左上角开始对平行于副对角线的2n-1条对角线的元素交替进行赋值。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define N 10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void SnakeSet(int A[],int B[]
)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int i,j,k,m,flag;//k记录已经完成赋值的元素个数,flag控制赋值方向。
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int *p = A;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(m = 0,flag = 1,k = 0;m<N;m++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(flag >0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = m,j = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(j<=m)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i--;j++;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = 0,j = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(i<=m)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;j--;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
flag = -flag;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(m = 1;m<N;m++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(flag >0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = N-1,j = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(j<=N)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i--;j++;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = m,j = N-1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(i<N)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;j--;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
flag = -flag;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3.判断二叉树T是否是完全二叉树,T采用二叉链表作为存储结构。
分析:利用层次遍历思想,设置一个标志flag,初值为0,按层次遍历时,若某个结点的左子树或右子树为空,则置flag为1,若此后遍历的结点的左子树和右子树都为空,则是完全二叉树,否则不是。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define MAXSIZE 100
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool BTLink_jurdge(BTNode * T)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *Q[MAXSIZE];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *p = T;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int flag = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitQueue(Q);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(!QueueEmpty(Q))
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DeQueue(Q,p);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL &&flag!=1)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p->data);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL &&flag!=1)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p->data);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4,二叉树T采用二叉链表作为存储结构,从右向左依次释放所有叶子结点,并且把结点值放到一个数组中。
分析:采用后序遍历的变形方式,先判断二叉树的根结点,再遍历右子树,最后遍历左子树。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void BTLink_DeleteLeaf(BiTree &T,ElemType sava[])
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
static int i = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return i;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T->lchild==NULL && T->child==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
save[i] = T->data;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
free(T);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
T = NULL;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTLink_DeleteLeaf(T->rchild,save);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTLink_DeleteLeaf(T->lchild,save);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
return i;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5.求任一指定结点所在的层次,二叉树T采用二叉链表作为存储结构.
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define MAX 100
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int BTLink_LevelNum(BTNode* T,ElemType x)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *Q[MAX],*p;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int front = 0,m,n,Level[MAX];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
++rear;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = T;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(front!=rear)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
front = (front+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
p = Q[front];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
m = Level[front];
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if(p->data==x)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
n = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
rear = (rear+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = p->lchild;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = m +1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
rear = (rear+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = p->rchild;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = m +1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return n;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
,B中数据在每一维方向都按从小到大的次序排列,而且整型变量x在B中存在,找出一对满足B[i][j]==x的i和j,要求比较次数不超过m+n
分析:从右上角的元素B[i][j]开始与x比较,每次有3种情况:(1)相等,则比较结束;(2)B[i][j]<x,则这一行不包含x,搜索下一行;(3)B[i][j]>x,则这一列不包含x,搜索下一列;这样,每次至少使搜索范围减少一行或一列,最多经过m+n次就可以找到x.
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void SearchIndex(int B[M]
,int x,int &i,int &j)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int i = 0,j= N-1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(B[i][j]!=x)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(B[i][j]<x)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
j--;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2,将一维数组A[n*n](n<=10)中的元素,按蛇型方式存放在二维数组B
中,
A[0] A[1] A[5] A[6]。。。
A[2] A[4] A[7] A[13]。。。
A[3] A[8] A[12]。。。
B = A[9] A[11]。。。
A[10]。。。
分析:从B的左上角开始对平行于副对角线的2n-1条对角线的元素交替进行赋值。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define N 10
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void SnakeSet(int A[],int B[]
)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int i,j,k,m,flag;//k记录已经完成赋值的元素个数,flag控制赋值方向。
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int *p = A;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(m = 0,flag = 1,k = 0;m<N;m++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(flag >0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = m,j = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(j<=m)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i--;j++;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = 0,j = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(i<=m)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;j--;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
flag = -flag;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
for(m = 1;m<N;m++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(flag >0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = N-1,j = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(j<=N)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i--;j++;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i = m,j = N-1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(i<N)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
B[i][j] = p[k];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;j--;k++;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
flag = -flag;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3.判断二叉树T是否是完全二叉树,T采用二叉链表作为存储结构。
分析:利用层次遍历思想,设置一个标志flag,初值为0,按层次遍历时,若某个结点的左子树或右子树为空,则置flag为1,若此后遍历的结点的左子树和右子树都为空,则是完全二叉树,否则不是。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define MAXSIZE 100
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
bool BTLink_jurdge(BTNode * T)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *Q[MAXSIZE];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *p = T;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int flag = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitQueue(Q);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(!QueueEmpty(Q))
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DeQueue(Q,p);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL &&flag!=1)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p->data);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL &&flag!=1)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
EnQueue(Q,p->data);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return false;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return true;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4,二叉树T采用二叉链表作为存储结构,从右向左依次释放所有叶子结点,并且把结点值放到一个数组中。
分析:采用后序遍历的变形方式,先判断二叉树的根结点,再遍历右子树,最后遍历左子树。
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
void BTLink_DeleteLeaf(BiTree &T,ElemType sava[])
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
static int i = 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return i;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(T->lchild==NULL && T->child==NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
save[i] = T->data;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
i++;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
free(T);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
T = NULL;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
else
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTLink_DeleteLeaf(T->rchild,save);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTLink_DeleteLeaf(T->lchild,save);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
return i;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5.求任一指定结点所在的层次,二叉树T采用二叉链表作为存储结构.
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#define MAX 100
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int BTLink_LevelNum(BTNode* T,ElemType x)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
BTNode *Q[MAX],*p;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
int front = 0,m,n,Level[MAX];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
++rear;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = T;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
while(front!=rear)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
front = (front+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
p = Q[front];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
m = Level[front];
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if(p->data==x)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
n = m;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
break;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->lchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
rear = (rear+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = p->lchild;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = m +1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if(p->rchild!=NULL)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
rear = (rear+1)%MAX;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Q[rear] = p->rchild;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Level[rear] = m +1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return n;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
相关文章推荐
- 数据结构复习笔记(5)
- 复习笔记——数据结构
- 数据结构复习笔记四:数组和广义表
- 数据结构复习笔记— —栈
- 数据结构 复习笔记
- 数据结构复习笔记(1)
- 《数据结构》复习笔记--队列
- 数据结构复习笔记六:图
- 数据结构复习笔记(一)
- 数据结构复习笔记:C++程序设计(一)
- 数据结构复习笔记(3)
- 数据结构复习笔记:使用PHP实现内排序之冒泡排序和简单选择排序
- 《数据结构》复习笔记--树
- 数据结构复习笔记 3
- 【郝斌数据结构自学笔记】57-59_递归8 _ 汉诺塔_1线性结构总复习 2线性结构和非线性结构关系 3栈队列链表数组之间的关系【重点】
- 数据结构复习笔记01_排序算法_交换排序
- 图论与数据结构复习笔记1 还没写完
- 数据结构复习笔记 2
- 数据结构复习笔记
- 《数据结构》复习笔记--线性表