leetcode第一刷_Populating Next Right Pointers in Each Node

143 篇文章 0 订阅

这道题之前没见过,一上来还真不知道怎么做。问题的限制条件,树是完全二叉树其实并不是关键,只不过是一个简化的条件而已。那关键是什么呢?如何从当前节点跳到下一个开始的节点。我的做法是,每次从一层的最左边节点开始,一层一层的走。其实只有两种形式的next指针需要我们来更新,第一种,同一个节点的左右孩子,第二种,父亲相邻时,左边父亲的右孩子和右边父亲的左孩子之间。完全二叉树的简化就体现在更新的过程,因为完全,所以有孩子肯定是双胞胎,因为完全,所以两个父亲的孩子之间关系很直接。

class Solution {
public:
    void connect(TreeLinkNode *root) {
        if(root == NULL)    return;
        TreeLinkNode *beginNode = root, *leftNode, *rightNode;
        while(beginNode){
            leftNode = beginNode;
            while(leftNode&&leftNode->left){
                leftNode->left->next = leftNode->right;
                if(leftNode->next){
                    rightNode = leftNode->next;
                    leftNode->right->next = rightNode->left;
                }
                leftNode = leftNode->next;
            }
            beginNode = beginNode->left;
        }
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值