题目描述 对于二叉树,请设计算法,创建包含一定深度所有结点的链表。 给定二叉树的根结点指针Trenode* root,以及链表上结点的深度,请返回链表Listnode,代表深度上所有结点的值。请按照树上从左到右的顺序链接,以确保深度不超过树的高度。树上结点的值为非负整数,不超过1万。
/*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) { ListNode* res = NULL; if(!root) return res; queue <TreeNode*> q; q.push(root); vector<int> temp; int num = 1; while (!q.empty()) { int size=q.size(); for (int i=0;i<size;i++) { ////一次处理一层数据 TreeNode *node=q.front(); if(num == dep) { temp.push_back(node->val); } q.pop(); if (node->left) q.push(node->left); if (node->right) q.push(node->right); } ++num; } ListNode* r = new ListNode(0); ListNode* start = r; for(auto i: temp) { r->next = new ListNode(i); r = r->next; } return start->next; }};
class TreeLevel {public: ListNode* getTreeLevel(TreeNode* root, int dep) { // write code here if(root == NULL || dep <= 0) return NULL; p = new ListNode(-1); ListNode* head = p; InOrder(root, dep); return head->next; } void InOrder(TreeNode* root, int dep) { if(root == NULL) return; if(dep == 1) { p->next = new ListNode(root->val); p = p->next; return; } InOrder(root->left, dep - 1); InOrder(root->right, dep - 1); } private: ListNode *p;};
