Follow up for problem “Populating Next Right Pointers in Each Node”.
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
- You may only use constant extra space.
For example,
Given the following binary tree,
After calling your function, the tree should look like:
我的C++代码实现如下:
class Solution {
public:
void connect(TreeLinkNode *root) {
for (TreeLinkNode *levelFirstNode = root; levelFirstNode != nullptr; levelFirstNode = getNext(levelFirstNode)) {
for (TreeLinkNode *curNode = levelFirstNode; curNode != nullptr; curNode = curNode->next) {
if (curNode->left) curNode->left->next = curNode->right ? curNode->right : getNext(curNode->next);
if (curNode->right) curNode->right->next = getNext(curNode->next);
}
}
}
private:
TreeLinkNode *getNext(TreeLinkNode *node) {
while (node) {
if (node->left) return node->left;
if (node->right) return node->right;
node = node->next;
}
return nullptr;
}
};
其中,getNext函数获取的是从当前节点开始的下一层的第一个节点。但是这种算法的时间性能表现非常不好(如下图所示),希望发掘更好更快的算法来解决这个问题。

针对Populating Next Right Pointers in Each Node问题,探讨了当输入为任意二叉树时解决方案的有效性,并提出了一种仅使用常数额外空间的方法。通过遍历每层节点并建立相邻节点间的连接,确保每个节点的next指针指向其右侧的下一个节点。同时,作者分享了自己的C++实现代码并指出其时间性能有待改进。
747

被折叠的 条评论
为什么被折叠?



