现在的位置: 首页 > 综合 > 正文

Populating Next Right Pointers in Each Node II

2017年12月23日 ⁄ 综合 ⁄ 共 854字 ⁄ 字号 评论关闭

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

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

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

/**
 * 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;
	}
}

};

抱歉!评论已关闭.