输出树单层结点

来源:互联网 发布:js中invoke 编辑:程序博客网 时间:2024/05/01 19:21

题目描述

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

class TreeLevel {public:    ListNode* getTreeLevel(TreeNode* root, int dep) {        // write code here        if(root == NULL)            return NULL;        //init        int count = -1;        queue<TreeNode*> que;        TreeNode* level = new TreeNode(count);        //第一层,序号在结点之前        que.push(level);        que.push(root);        count--;        //第二层        while (!que.empty()){            TreeNode* tmp = que.front();            que.pop();            int key = tmp->val;            //结点            if(key >= 0){                if(tmp->left != NULL)                    que.push(tmp->left);                if(tmp->right != NULL)                    que.push(tmp->right);            }                //层标志            else{                //到达所要的层                if(dep == -key){                    ListNode* head = new ListNode(0);                    ListNode* p = head;                    while (!que.empty()){                        //树操作,拿出队列的后续所有数据                        key = que.front()->val;                        que.pop();                        //链表操作                        ListNode* list_tmp = new ListNode(key);                        p->next = list_tmp;                        p = p->next;                    }                    return head->next;                }                    //还没到指定层                else{                    tmp->val = count;                    count--;                    que.push(tmp);                }            }        }        return NULL;    }};
0 0
原创粉丝点击