输出二叉树中,第m层的第k个节点值

来源:互联网 发布:走遍中国中国古镇 知乎 编辑:程序博客网 时间:2024/06/04 22:53

给定以下二叉树: 
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;}


0 0
原创粉丝点击