Populating Next Right Pointers in Each Node
来源:互联网 发布:制作地图的软件 编辑:程序博客网 时间:2024/06/11 17:36
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 toNULL
.
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
思路:题目很简单,读懂就行了。
只用考虑两种情况。
1.一种是 2 -> 3
2. 另外一种是:5 ->6
注意,题目开始所有的都是null,所以没有必要考虑右边的那些null.
注意:题目要求 constant extra space. 所以,要用while循环来做。
保存第一个first node,然后下一层就是first.left
每层之间的传递是 cur = cur.next
cur走横向,first走纵向;
/** * 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) { if(root == null) return; TreeLinkNode first = root; while(first!=null){ TreeLinkNode cur = first; while(cur!=null){ if(cur.left!=null && cur.right != null){ cur.left.next = cur.right; } if(cur.right!= null && cur.next!=null && cur.next.left!=null){ cur.right.next = cur.next.left; } cur = cur.next; } first = first.left; } } }
思路2: 这题也可以用pre-order recursion来做。但是不满足题目要求 constant space. 因为recursion需要空间log(N);
/** * 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) { if(root == null) return; if(root.left!=null && root.right!=null){ root.left.next = root.right; } if(root.next!=null && root.next.left!=null && root.right!=null){ root.right.next = root.next.left; } connect(root.left); connect(root.right); } }
0 0
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- Populating Next Right Pointers in Each Node
- 什么ARP和ARP欺骗
- Android下Speex库除0错误(SIGFPE)排除
- const c++
- struts1 End of Life 公告
- 关于JavaScript函数调用其他函数的笔记
- Populating Next Right Pointers in Each Node
- 变量类型
- Cache不命中的分类 Categories of Cache misses
- SSH 免密码登录
- 三轴加速度计的原理和方法
- [LeetCode] Unqiue Binary Search Trees II
- Converse帆布鞋 7mVo iEU n2obl
- 负载均衡技术之7LVS、Nginx和HAProxy对比总结
- ugg 8OHa U2oJ R3now