[Leetcode 116, Medium] Populating Next Right Pointers in Each Node
来源:互联网 发布:java二次开发前景怎样 编辑:程序博客网 时间:2024/06/05 14:24
Problem:
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).
For example,
Given the following perfect binary tree,
1 / \ 2 3 / \ / \ 4 5 6 7
After calling your function, the tree should look like:
1 -> NULL / \ 2 -> 3 -> NULL / \ / \ 4->5->6->7 -> NULL
Analysis:
Solutions:
C++:
(I) Non-recursive:
void connect(TreeLinkNode *root) { if(root == NULL || (root->left == NULL && root->right == NULL)) return; queue<TreeLinkNode *> node_queue; node_queue.push(NULL); TreeLinkNode *p_cur = root; vector<TreeLinkNode *> node_level; while(p_cur || !node_queue.empty()) { if(p_cur) { if(p_cur->left) { node_queue.push(p_cur->left); node_level.push_back(p_cur->left); } if(p_cur->right) { node_queue.push(p_cur->right); node_level.push_back(p_cur->right); } } else { node_queue.push(NULL); for(int i = 0; i < node_level.size() - 1; ++i) node_level[i]->next = node_level[i + 1]; node_level.clear(); } p_cur = node_queue.front(); node_queue.pop(); } }(II) Recursive:
void connect(TreeLinkNode *root) { if(root == NULL) return; if(root->left != NULL) root->left->next = root->right; if(root->right !=NULL) root->right->next = root->next? root->next->left:NULL; connect(root->left); connect(root->right); }Java:
Python:
0 0
- [Leetcode 116, Medium] Populating Next Right Pointers in Each Node
- LeetCode #116 - Populating Next Right Pointers in Each Node - Medium
- LeetCode 116: Populating Next Right Pointers in Each Node
- LeetCode 116 Populating Next Right Pointers in Each Node
- LeetCode: Populating Next Right Pointers in Each Node [116]
- LeetCode(116) Populating Next Right Pointers in Each Node
- [leetcode 116] Populating Next Right Pointers in Each Node
- leetcode || 116、Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node - LeetCode 116
- LeetCode 116 Populating Next Right Pointers in Each Node
- leetcode-116-Populating Next Right Pointers in Each Node
- leetcode[116]:Populating Next Right Pointers in Each Node
- LeetCode(116) Populating Next Right Pointers in Each Node
- Leetcode #116 Populating Next Right Pointers in Each Node
- [leetcode-116]Populating Next Right Pointers in Each Node(c++)
- [leetcode-116]Populating Next Right Pointers in Each Node(c++)
- leetcode 116: Populating Next Right Pointers in Each Node
- LeetCode(116) Populating Next Right Pointers in Each Node
- java 程序构成 及 开发工具 简介
- linux 命令之 dmidecode
- 黑马程序员-------java基础-IO(1)
- husterxsp.github.io
- Add Binary
- [Leetcode 116, Medium] Populating Next Right Pointers in Each Node
- 如何让你的APK跑在 com.android.phone 进程
- 简单谈谈对Object C的理解
- 快速排序 归并排序
- hdu 3511 圆扫描线
- 【读书笔记】iOS-GCD-block
- Python GUI编程(Tkinter)
- POJ 1573:Robot Motion
- FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT用法