标签:
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针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) { // write code here if (root==0||dep<=0) return 0; ListNode* nodehead = new ListNode(-1); ListNode* node = nodehead; queue<TreeNode*> q; q.push(root); //层次遍历的基础上,添加判断是否属于第dep层。 int line1=1,line2=0,num=1; while(!q.empty()){ if(dep == num){ for(int i=0;i<line1;i++){ ListNode* tmp = new ListNode(q.front()->val); node->next = tmp; node = tmp; q.pop(); } return nodehead->next; } TreeNode * root1 = q.front(); q.pop(); if(root1->left != nullptr){ q.push(root1->left); line2++; } if(root1->right != nullptr){ q.push(root1->right); line2++; } if(--line1==0){ line1=line2; line2=0; num++; } } return nodehead->next; } };
line1表示出队那一层留下的元素个数,line2表示下一层入队元素的个数。num表示遍历的层数。
标签:
原文地址:http://www.cnblogs.com/huweidong91/p/5581933.html