題目描述
對於一棵二叉樹,請設計一個算法,創建含有某一深度上所有結點的鏈表。
給定二叉樹的根結點指針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;
}
}
};