LeetCode:Populating Next Right Pointers in Each Node I,II 编程之美3.10

本文介绍了一种使用队列实现的二叉树分层遍历方法,通过队列数据结构来实现逐层遍历节点,优化了传统遍历方式,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解答:

        队列实现按排遍历

class Solution {
public:
struct InvoLevelNode 
{
    TreeLinkNode *node;
    int level;
    InvoLevelNode(TreeLinkNode *p,int n):node(p),level(n){}
    InvoLevelNode(){}//重定义构造函数时,一定要把程序里面出现情况全部构造完全
};
    void connect(TreeLinkNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(root ==NULL)return ;
        deque<InvoLevelNode>L;
        int level = 1;
        InvoLevelNode p,q;
        L.push_back(InvoLevelNode(root,1));
        while(L.size())
        {
            p = L.front();
            L.pop_front();
            if(p.node->left)
               L.push_back(InvoLevelNode(p.node->left,p.level+1));
            if(p.node->right)
               L.push_back(InvoLevelNode(p.node->right,p.level+1));
            if(L.size())
                q= L.front();
            else
            {
                p.node->next = NULL;
                continue;
            }
            if(p.level == q.level)
               p.node->next = q.node;
            else
               p.node->next = NULL;
        }
        
        
        
    }
};

查看编程之美 3.10 分层遍历二叉树感觉代码更好点 如下

class Solution {
public:
    void connect(TreeLinkNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(root==NULL)return;
        vector<TreeLinkNode*> V;
        TreeLinkNode* node;
        int last = 1;
        int nowp = 0;
        V.push_back(root);
        while(last!= nowp)
        {
            node = V[nowp];
            if(node->left)             //这个要在last更新之前做
               V.push_back(node->left);
            if(node->right)
               V.push_back(node->right);
            if(nowp == last - 1 )
            {
               node->next = NULL;   
               last = V.size();//遍历完一层,新压入的只有可能是下一层的元素
            }
            else
            {
                node->next = V[nowp+1];
            }
           
            nowp++;
        }
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值