《程序员面试金典》输出单层结点

来源:互联网 发布:上海老年人口 知乎 编辑:程序博客网 时间:2024/04/30 04:30

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】


题目链接:http://www.nowcoder.com/practice/cb6c883b123b44399377d0c71e6ba3ea?rp=1&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-the-coding-interview/question-ranking


题目描述
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针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 hereif(root==nullptr)return nullptr;queue<TreeNode*> Q,tmp;Q.push(root);int cnt = 1;ListNode *newList = new ListNode(0);ListNode *pNode = newList;while(!Q.empty()){if(cnt==dep){while(!Q.empty()){ListNode *newNode = new ListNode(Q.front()->val);Q.pop();pNode->next = newNode;pNode = pNode->next;}}while(!Q.empty()){TreeNode *cur = Q.front();Q.pop();tmp.push(cur->left);tmp.push(cur->right);}while(!tmp.empty()){Q.push(tmp.front());tmp.pop();}++cnt;}return newList->next;}};


0 0
原创粉丝点击