1 输出以孩子兄弟链表存储的树T的所有的边(树的递归)
void Outedge(Tree T)
{
if(T)
{
p = T->firstchild;
while(p)
{
printf(T->data, p->data);
Outedge(p);
p = p->nextsibling;
}
}
}
2 求两个顶点(v,s)之间的所有简单路径(图的递归)
void DFSearch(Graph G, int v int s)
{
visited[v] = TRUE;
Append(PATH, getVertex(v));
for(w = FirstAdjVex(v); w != 0; w = NextAdjVex(v))
OutPath(PATH);
if(!visited[w]) DFSearch(G, w, s);
visited[v] = FALSE; //下次还有可能路过v节点,所以v要可以重复访问
}
3 已知L[i]和R[i]分别是二叉树中中第i个结点的左孩子和右孩子结点,判断结点u是否是结点v的子孙。
Status descendent(int L[], int R[], int u, int v)
{
if(u && v)
{
if(L[v]==u || R[v]==u)
return TRUE;
else if(descendent(L,R,u,L[v]));
return TRUE;
else return descendent(L,R,u,L[v]);
}
else return FALSE;
}
4 查找二叉树元素x的结点,删去以它为根的子树,并释放相应的空间
void Delete-X(BiTree &BT, ElemType X)
{
if(BT)
{
if(BT->data == x)
{
disp(BT);//如果找到,删除对应的树
BT = NULL;
}
else
{
Delete-X(BT->Lchild,x);//递归查找
Delete-X(BT->Rchild,x);
}
}
}
阅读(1013) | 评论(0) | 转发(0) |