题意:
将一颗二叉树的节点使用每个节点中的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;}
}