您的位置:首页 > Web前端 > Node.js

Populating Next Right Pointers in Each Node --- leetcode

2015-04-09 23:06 225 查看
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;
}
}
};


参考了大神代码,我是不太会做啦、、、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: