116. Populating Next Right Pointers in Each Node
2016-04-16 12:16
686 查看
Given a binary tree
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
Initially, all next pointers are set to
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,
After calling your function, the tree should look like:
Solution 1
public static void connect2(TreeLinkNode root) {
if(root == null){
return;
}
TreeLinkNode pre = root;
TreeLinkNode cur = null;
while(pre.left != null){
cur = pre;
while(cur != null){
cur.left.next = cur.right;
if(cur.next != null){
cur.right.next = cur.next.left;
}
cur = cur.next;
}
pre = pre.left;
}
}
//same idea
public void connect22(TreeLinkNode root) {
while(root != null && root.left != null) {
TreeLinkNode cur = root;
while(cur != null) {
cur.left.next = cur.right;
cur.right.next = cur.next == null ? null : cur.next.left;
cur = cur.next;
}
root = root.left;
}
}
Solution 2 Recursive
public void connect3(TreeLinkNode root) {
if(root == null || root.left == null) return;
connectNodes(root.left, root.right);
}
public void connectNodes(TreeLinkNode node1, TreeLinkNode node2) {
node1.next = node2;
if(node1.left != null) {
connectNodes(node1.left, node1.right);
connectNodes(node1.right, node2.left);
connectNodes(node2.left, node2.right);
}
}
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
Solution 1
public static void connect2(TreeLinkNode root) {
if(root == null){
return;
}
TreeLinkNode pre = root;
TreeLinkNode cur = null;
while(pre.left != null){
cur = pre;
while(cur != null){
cur.left.next = cur.right;
if(cur.next != null){
cur.right.next = cur.next.left;
}
cur = cur.next;
}
pre = pre.left;
}
}
//same idea
public void connect22(TreeLinkNode root) {
while(root != null && root.left != null) {
TreeLinkNode cur = root;
while(cur != null) {
cur.left.next = cur.right;
cur.right.next = cur.next == null ? null : cur.next.left;
cur = cur.next;
}
root = root.left;
}
}
Solution 2 Recursive
public void connect3(TreeLinkNode root) {
if(root == null || root.left == null) return;
connectNodes(root.left, root.right);
}
public void connectNodes(TreeLinkNode node1, TreeLinkNode node2) {
node1.next = node2;
if(node1.left != null) {
connectNodes(node1.left, node1.right);
connectNodes(node1.right, node2.left);
connectNodes(node2.left, node2.right);
}
}
相关文章推荐
- nodejs npm常用命令
- Node系列-快速开始Koa2
- nodejs笔记
- Node.js express路由简单分析
- Node.js学习 - Multiprocess
- Node.js学习 - RESTFul API
- Node.js学习 - Express
- Node.js学习 - Web Server
- Node.js学习 - GET/POST
- Node.js学习 - File Operation
- Node.js学习 - Route
- Node.js学习 - Function
- Node.js学习 - Modules
- Node.js学习 - Stream
- Node.js学习 - Buffer
- Node.js学习 - Event Loop
- Node.js学习 - CallBack Function
- Node 学习笔记之事件发射器
- Node.js学习 - Install and Configure
- 116. Populating Next Right Pointers in Each Node