给定以下二叉树:
struct node_t
{
node_t *left, *right;
int value;
};
要求编写函数 node_t* foo(node_t *node, unsigned int m, unsigned int k);
输出以 node 为根的二叉树第 m 层的第 k 个节点值.
(level, k 均从 0 开始计数)
注意:
.此树不是完全二叉树;
.所谓的第K个节点,是本层中从左到右的第K个节点
分析: 此处,需要层序遍历二叉树,然后,计数找到第m层第k个节点。
Node* GetMLNElem( Node *pNode, UINT m, UINT n )
{
int level = 0, count = 0, levelNum = 0;
queue<Node *> elemQueue;
if ( pNode != NULL )
{
<span style="white-space:pre"> </span>elemQueue.push( pNode );
while ( !elemQueue.empty() )
{
// 获取上一层的节点个数
levelNum = elemQueue.size();
while ( levelNum > 0 )
{
--levelNum;
Node *pTemp = elemQueue.front();
elemQueue.pop();
// 找到符合条件的元素,直接返回
++count;
if ( level == m && count == n )
{
return pTemp;
}
if ( pTemp->left != NULL )
{
elemQueue.push( pTemp->left );
}
if ( pTemp->right != NULL )
{
elemQueue.push( pTemp->right );
}
}
++level;
count = 0;
}
}
return NULL;
}
struct node_t
{
node_t *left, *right;
int value;
};
要求编写函数 node_t* foo(node_t *node, unsigned int m, unsigned int k);
输出以 node 为根的二叉树第 m 层的第 k 个节点值.
(level, k 均从 0 开始计数)
注意:
.此树不是完全二叉树;
.所谓的第K个节点,是本层中从左到右的第K个节点
Node* GetMLNElem( Node *pNode, UINT m, UINT n )
{
int level = 0, count = 0, levelNum = 0;
queue<Node *> elemQueue;
if ( pNode != NULL )
{
<span style="white-space:pre"> </span>elemQueue.push( pNode );
while ( !elemQueue.empty() )
{
// 获取上一层的节点个数
levelNum = elemQueue.size();
while ( levelNum > 0 )
{
--levelNum;
Node *pTemp = elemQueue.front();
elemQueue.pop();
// 找到符合条件的元素,直接返回
++count;
if ( level == m && count == n )
{
return pTemp;
}
if ( pTemp->left != NULL )
{
elemQueue.push( pTemp->left );
}
if ( pTemp->right != NULL )
{
elemQueue.push( pTemp->right );
}
}
++level;
count = 0;
}
}
return NULL;
}