题意:

将一颗二叉树的节点使用每个节点中的next指针将每行从左向右连接起来。

思路:层次遍历

每次加入链表同时加入对应的行号,若前一节点与当前节点行号不同则前一节点指向NULL。

struct Node {
	TreeLinkNode *TLN;
	int L;
	Node(TreeLinkNode *T, int i) :TLN(T), L(i) {};
};

void connect(TreeLinkNode *root) {
	if (!root)
		return;
	root->next = NULL;
	list<Node> s;
	Node p(root, 1);
	if (root->left)
		s.push_back(Node(root->left, 2));
	if (root->right)
		s.push_back(Node(root->right, 2));

	Node back = p;
	while (!s.empty()) {
		p = s.front();
		s.pop_front();
		if (p.L == back.L)
			back.TLN->next = p.TLN;
		else 
			back.TLN->next = NULL;


		if (p.TLN->left)
			s.push_back(Node(p.TLN->left, p.L + 1));
		if (p.TLN->right)
			s.push_back(Node(p.TLN->right, p.L + 1));
		back = p;
	}
}