输出树单层结点

题目描述

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值