输出单层结点

来源:互联网 发布:地接导游知乎 编辑:程序博客网 时间:2024/05/01 05:27

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

给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。(根节点深度为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)     {        // write code here        if(root==NULL||dep<0)            return NULL;        //宽度优先搜索        ListNode* head=NULL;        int d=1;      //当前队列中的待弹出节点的深度(根节点的深度为0)        int curnum=1;//当前层需要弹出的节点数        int nextnum=0;//下一层需要弹出的节点数        queue<TreeNode*> q;        q.push(root);        while(!q.empty())        {            if(d!=dep)            {                while(curnum--)                {                    TreeNode* tmp=q.front();                    if(tmp->left)                    {                        q.push(tmp->left);                        nextnum++;                    }                    if(tmp->right)                    {                        q.push(tmp->right);                        nextnum++;                    }                    q.pop();                }            }            else            {                //此时队列中的所有节点均为深度dep上的节点                ListNode* last=NULL;                while(!q.empty())                {                    if(head==NULL)                    {                        TreeNode* tmp=q.front();                        ListNode* Node=new ListNode(tmp->val);                        head=Node;                        last=head;                        q.pop();                    }                    else                    {                        TreeNode* tmp=q.front();                        ListNode* Node=new ListNode(tmp->val);                        last->next=Node;                        last=Node;                        q.pop();                    }                }                return head;            }            d++;            curnum=nextnum;            nextnum=0;        }        return head;    }};

0 0
原创粉丝点击