输出单层结点

来源:互联网 发布:伤感的网络歌曲有哪些 编辑:程序博客网 时间:2024/05/01 09:55

题目描述

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

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


0 0
原创粉丝点击