当前位置: 首页 > 图灵资讯 > 技术篇> 二叉树单层节点组成链表

二叉树单层节点组成链表

来源:图灵教育
时间:2023-06-02 09:29:52

题目描述 对于二叉树,请设计算法,创建包含一定深度所有结点的链表。 给定二叉树的根结点指针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;};