国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Populating Next Right Pointers in Each Node II [leetcode] 空间O(1)的基于循环和基于递归的两种方法

Populating Next Right Pointers in Each Node II [leetcode] 空间O(1)的基于循环和基于递归的两种方法

来源:程序员人生   发布时间:2014-10-10 08:00:01 阅读次数:3177次

基于循环的方法:

void connect(TreeLinkNode *root) { if (root == NULL) return; TreeLinkNode * start = root; TreeLinkNode * end = root; TreeLinkNode * levelEnd = root; while (start != NULL) { if (start->left != NULL) { end->next = start->left; end = end->next; } if (start->right != NULL) { end->next = start->right; end = end->next; } if (start == levelEnd) { start = start->next; levelEnd->next = NULL; levelEnd = end; } else { start = start->next; } } }

基于递归的方法

void connect(TreeLinkNode *curQueue) { if (!curQueue) return; TreeLinkNode* nextQueue = new TreeLinkNode(-1);//dummy node TreeLinkNode* head = nextQueue; while (curQueue) { if (curQueue->left) { nextQueue->next = curQueue->left; nextQueue = nextQueue->next; } if (curQueue->right) { nextQueue->next = curQueue->right; nextQueue = nextQueue->next; } curQueue = curQueue->next; } nextQueue = head; head = head->next; delete nextQueue; connect(head); }


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生