Populating Next Right Pointers in Each Node II

本文介绍了一种将任意二叉树转换为链表的层序遍历方法,通过直观处理每层节点的连接,实现树形结构到链表结构的高效转换。

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

跟上一题差不多,区别是这次是任意的二叉树。

然后马上反应过来上一题的思路反而有点绕,其实说到底还是很直观的层序遍历,然后遍历的时候处理下一层的连接,连接完成后下一层已经连成一条链表,然后在下沉层序遍历下一层就好了。

代码还是比较容易理解的,就不解释了

/**
 * Definition for binary tree with next pointer.
 * struct TreeLinkNode {
 *  int val;
 *  TreeLinkNode *left, *right, *next;
 *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
 * };
 */
class Solution {
public:
    void connect(TreeLinkNode* root)
{
    TreeLinkNode* curHead=root;;
    while(curHead)
	{
		TreeLinkNode* cur=curHead;
        TreeLinkNode* nextHead=NULL;
		TreeLinkNode* lastNode=NULL;
		while(cur)
		{
			if (!cur->left&&!cur->right)
            {
                //nothing
            }
			else if (cur->left&&cur->right)
			{
				if (lastNode)
					lastNode->next=cur->left;
				cur->left->next=cur->right;
				lastNode=cur->right;
                if (!nextHead)
                    nextHead=cur->left;
			}
			else
			{
				TreeLinkNode* tmp=cur->left?cur->left:cur->right;
				if (lastNode)
					lastNode->next=tmp;
				lastNode=tmp;
                if (!nextHead)
                    nextHead=tmp;
			}
			cur=cur->next;
		}
        if ( lastNode )
            lastNode->next=NULL;
		curHead=nextHead;
	}
}

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值