题目描述
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
class TreeLevel {
public:
ListNode* getTreeLevel(TreeNode* root, int dep) {
// write code here
if(root == NULL)
return NULL;
//init
int count = -1;
queue<TreeNode*> que;
TreeNode* level = new TreeNode(count);
//第一层,序号在结点之前
que.push(level);
que.push(root);
count--;
//第二层
while (!que.empty()){
TreeNode* tmp = que.front();
que.pop();
int key = tmp->val;
//结点
if(key >= 0){
if(tmp->left != NULL)
que.push(tmp->left);
if(tmp->right != NULL)
que.push(tmp->right);
}
//层标志
else{
//到达所要的层
if(dep == -key){
ListNode* head = new ListNode(0);
ListNode* p = head;
while (!que.empty()){
//树操作,拿出队列的后续所有数据
key = que.front()->val;
que.pop();
//链表操作
ListNode* list_tmp = new ListNode(key);
p->next = list_tmp;
p = p->next;
}
return head->next;
}
//还没到指定层
else{
tmp->val = count;
count--;
que.push(tmp);
}
}
}
return NULL;
}
};