程序员人生 网站导航

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

栏目:互联网时间:2014-10-10 08:00:01

基于循环的方法:

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); }


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐