输出单层结点

设计算法从二叉树中获取指定深度的所有结点,形成链表,按从左到右的顺序排列,结点值为非负整数且不超过100000。
摘要由CSDN通过智能技术生成

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

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

-----------------------------------------

/*
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)
            return nullptr;
        ListNode *res = new ListNode(root->val);
        ListNode *p = res;//工作指针
        queue<struct TreeNode*> que;
        if (dep == 1)
            return res;
        que.push(root);
        int curlevel = 1;//当前层
        int ininum = 1;//初始hua层节点数
        int curnum;
        while(!que.empty() && curlevel < dep){
            curnum = ininum;
            ininum = 0;
            for (int i=0; i<curnum; ++i){
                //利用前一层 让当前层进队
                struct TreeNode* cur = que.front();
                que.pop();
                if (cur->left){
                    //有左孩子 左孩子进队,当前层节点树+1
                    que.push(cur->left);
                    ++ininum;
                }
                if (cur->right){
                    //有左孩子 左孩子进队,当前层节点树+1
                    que.push(cur->right);
                    ++ininum;
                }
            }
            ++curlevel;
        }
        //队列中节点即为所需
        while(!que.empty()){
            ListNode *node = new ListNode(que.front()->val);
            que.pop();
            p->next = node;
            p = node;
        }
        return res->next;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值