116. Populating Next Right Pointers in Each Node
题意:
将一颗二叉树的节点使用每个节点中的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;
}
}