题目描述
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class TreeLevel
{
public:
ListNode* getTreeLevel(TreeNode* root, int dep)
{
const int Max=100000;
ListNode *pHead=new ListNode(-1);//
ListNode *pNode=pHead;
TreeNode* p_tree[Max];//循环队列;
int front=0,rear=0,num_p;//num_p用来记录当前层的最后一个节点的位置
int level=1;//用来记录当前遍历树的层数;
if(root!=NULL)
{
p_tree[rear]=root;
rear=(rear+1)%Max;
num_p=rear;
}
while(level<dep)
{
while(front<num_p)//当前层的子节点全部入队列
{
TreeNode* tmp=p_tree[front];
front=(front+1)%Max;//出队列;
if (tmp->left!=NULL)
{
p_tree[rear]=tmp->left;
rear=(rear+1)%Max;
}
if (tmp->right!=NULL)
{
p_tree[rear]=tmp->right;
rear=(rear+1)%Max;
}
}
num_p=rear;
level++;//层次加一;
}
if(level==dep)
{
while(front<rear)
{
ListNode* tmpNode=new ListNode(p_tree[front]->val);
front=(front+1)%Max;
pNode->next=tmpNode;
pNode=tmpNode;
}
pNode->next=NULL;
return pHead->next;
}
}
};