这是我的思路和算法伪代码,是可行的:
已知有队列的数据结构Queue,存储二叉树的节点,EnQueue是入队列函数,DeQueue是出队列函数,IsEmpty是判断队列是否为空的函数,InitQueue是初始化队列函数。
算法思想是:对二叉树采用按层次遍历的方法,将第i层和第i+1层节点分别存入两个队列中,当某一层的序号恰好是k时,再在队列中顺序查找第m个元素。
BTNode* visit(BTNode* p, int k, int m)
{
int level; /* 当前节点的层次(1..*) */
int seq; /* 当前节点在当前层的序号(1..*) */
BTNode *curr;
Queue Q1, Q2;
Q1 = InitQueue(); /* 初始化队列 */
Q2 = InitQueue();
EnQueue(Q1, p); /* 根节点入队列 */
for(level=2; levelpLchild != NULL)
EnQueue(Q2, curr->pLchild);
if(curr->pRchild != NULL)
EnQueue(Q2, curr->pRchild);
}
if(IsEmpty(Q2))
{
printf("二叉树不足k层");
exit(-1);
}
/* 交换Q1、Q2 */
while(!IsEmpty(Q2))
{
DeQueue(Q2, curr);
EnQueue(Q1, curr);
}
}
/* 从队列Q1中顺序查找第m个元素 */
for(seq=1; seq |