输出单层结点

题目描述

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。

给定二叉树的根结点指针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;
			}
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值