[leetcode] Populating Next Right Pointers in Each Node
2015-06-25 22:18
686 查看
From : https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
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:
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
/** * 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) { TreeLinkNode *cur=root, *up, *dp, *t; while(cur) { up = cur; dp = t = cur->left; while(dp) { dp->next = up->right; if(!up->next) break; up = up->next; dp = dp->next; dp->next = up->left; dp = dp->next; } cur = t; } } };
/** * Definition for binary tree with next pointer. * public class TreeLinkNode { * int val; * TreeLinkNode left, right, next; * TreeLinkNode(int x) { val = x; } * } */ public class Solution { public void connect(TreeLinkNode root) { TreeLinkNode up = root; while(up != null) { TreeLinkNode dp = up.left; TreeLinkNode newUp = dp; while(dp != null) { dp = dp.next = up.right; if(up.next != null) { up = up.next; dp = dp.next = up.left; } else { dp = null; } } up = newUp; } } }
相关文章推荐
- Node API
- 配置ssh时sshd不能启动解决办法
- Node.js学习
- NodeJs 开发者最常犯的10个错误(一)
- node mysql 链接
- leetcode-24Swap Nodes in Pairs
- LintCode Nth to Last Node in List 链表倒数第n个节点
- 在HDFS集群中优化secondary namenode到datanode1节点上,并做重启hdfs集群后,datanode1启动失败
- NodeJS获取命令行后面的参数
- Nodejs服务器管理模块forever
- leetcode-19Remove Nth Node From End of List
- ClippingNode实现跑马灯文字(例如游戏公告等)
- node.js导出excel ,csv
- LintCode Remove Nth Node From End of List 删除链表中倒数第n个节点
- Nodepad++ 快捷键
- 写给Node.js新手的7个小技巧
- Count Complete Tree Nodes ——LeetCode
- nodejs学习篇
- kafka I wrote this conflicted ephemeral node
- [NodeJS] 优缺点及适用场景讨论