面试题 04.03. 特定深度节点链表
https://leetcode-cn.com/problems/list-of-depth-lcci/
这道题比较简单,就是遍历树,广度优先,一层层的遍历,唯一需要注意的是,如何定义到了第几层,做法就是在每一层结束,下一层开始,加入一个标识符。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
vector<ListNode*> listOfDepth(TreeNode* tree) {
vector<ListNode*> alist;
if (tree != NULL)
{
queue<TreeNode*> nodequeue;
ListNode* plnode = NULL;
nodequeue.push(tree);
nodequeue.push(NULL);
TreeNode * tnode = NULL;
int tlevel = 0;
while (!nodequeue.empty())
{
tnode = nodequeue.front();
nodequeue.pop();
if (tnode == NULL)
{
tlevel++;
if (nodequeue.empty())
{
break;
}
plnode = NULL;
nodequeue.push(NULL);
continue;
}
else
{
if (plnode == NULL)
{
plnode = new ListNode(0);
plnode->val = tnode->val;
alist.emplace_back(plnode);
}
else
{
plnode->next = new ListNode(0);
plnode = plnode->next;
plnode->val = tnode->val;
}
}
if (tnode->left != NULL)
{
nodequeue.push(tnode->left);
}
if (tnode->right != NULL)
{
nodequeue.push(tnode->right);
}
}
}
return alist;
}
};