输出单层结点

来源:互联网 发布:手机淘宝如何修改好评 编辑:程序博客网 时间:2024/05/01 07:27

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

给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。


【思路】用两个队列实现树的层序遍历,当遍历到dep层时,创建链表。


/*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==NULL || dep <0) return NULL;        ListNode* dummy = new ListNode(-1);        ListNode* node = dummy;        queue<TreeNode*> q;        queue<TreeNode*> q2;        q.push(root);        int i = 1;       while(!q.empty())           {while(!q.empty())            {             TreeNode* t = q.front();             q.pop();               if(i==dep)                   {                     node->next = new ListNode(t->val);            node = node->next;               }            if(t->left){                q2.push(t->left);            }            if(t->right)                {                q2.push(t->right);            }           }            swap(q,q2);             if(i == dep){                return dummy->next;            }            ++i;        }        return NULL;    }};


0 0
原创粉丝点击