/*
2.给定以下二叉树:
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个节点
第三题 系统设计题
*/
#include <iostream>
using namespace std;
const int MAX_LENGTH = 100;
struct node_t
{
node_t *left;
node_t *right;
int value;
};
node_t *queue[100];
int level = 0; // 记录第几层
int count = 0; // 记录第level层的第几个结点
int top = -1;
int rear = -1;
bool IsQueueEmpty()
{
return top == rear;
}
void EnQueue(node_t *node)
{
queue[++rear] = node;
}
node_t* DeQueue()
{
return queue[++top];
}
void CreateBiTree(node_t **root)
{
char ch;
cin >> ch;
if (ch == '*')
{
*root = NULL;
return;
}
else
{
*root = new node_t;
(*root)->value = ch;
CreateBiTree(&(*root)->left);
CreateBiTree(&(*root)->right);
}
}
node_t* foo(node_t *node, unsigned int m, unsigned int k)
{
node_t *p = node;
int last = -1;
if (p != NULL)
{
EnQueue(p); // 入队
while (!IsQueueEmpty())
{
last = rear;
while (top < last)
{
node_t *q = DeQueue();
count++; // 当前层的第X个结点
if (level == m && count == k)
{
cout << q->value << endl;
return q;
}
if (q->left != NULL)
{
EnQueue(q->left);
}
if (q->right != NULL)
{
EnQueue(q->right);
}
}
level++;
count = 0;
}
}
cout << "找不到符合的结点" << endl;
return NULL;
}
int main()
{
node_t *root;
CreateBiTree(&root);
cout << "树建立完毕" << endl;
foo(root, 1, 1);
return 0;
}