輸出單層結點

題目描述

對於一棵二叉樹,請設計一個算法,創建含有某一深度上所有結點的鏈表。

給定二叉樹的根結點指針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;
			}
	}
};


發佈了41 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章