Given a binary tree
struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; }
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL
.
Initially, all next pointers are set to NULL
.
Note:
- You may only use constant extra space.
- You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
一个满二叉树,每个节点添加指向右边节点的指针,没有右兄弟的就是NULL
思路:
广搜好像很容易实现,但是不能原地实现(需要队列)×
DFS肯定要用栈或者递归,O(lgn)空间 ×
有一个层的next指针已经确定好的话,其下一层的next指针很好确定,类似于广搜(直接用next实现了队列)
所以这题的做法;
从root开始,root的next = NULL
root的下一层依次指向右兄弟
……
完成。。。
代码如下:
/**
* 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) {
if (!root) return;
TreeLinkNode *rootTmp = root;
TreeLinkNode* QHead;
while (rootTmp->left)
{
QHead = rootTmp;
while (QHead)
{
QHead->left->next = QHead->right;
if (QHead->next)
QHead->right->next = QHead->next->left;
QHead = QHead->next;
}
rootTmp = rootTmp->left;
}
}
};
参考了大神代码,我是不太会做啦、、、