【二叉树&层次遍历】Populating Next Right Pointers in Each Node
2014-04-19 16:59
369 查看
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:
解法:层次遍历,特殊的地方在于遍历完一层之后要添加一个null作为标志,且当队列为空时不能放null否则会死循环
/**
* 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) {
Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
if(root == null) return;
q.offer(root);
q.offer(null);
while(!q.isEmpty()){
TreeLinkNode pre = q.poll();
if(pre == null){
if(!q.isEmpty())//判断队列中是否还有元素
q.offer(null);
continue;
}
pre.next = q.peek();
if(pre.left != null) q.offer(pre.left);
if(pre.right != null) q.offer(pre.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
解法:层次遍历,特殊的地方在于遍历完一层之后要添加一个null作为标志,且当队列为空时不能放null否则会死循环
/**
* 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) {
Queue<TreeLinkNode> q = new LinkedList<TreeLinkNode>();
if(root == null) return;
q.offer(root);
q.offer(null);
while(!q.isEmpty()){
TreeLinkNode pre = q.poll();
if(pre == null){
if(!q.isEmpty())//判断队列中是否还有元素
q.offer(null);
continue;
}
pre.next = q.peek();
if(pre.left != null) q.offer(pre.left);
if(pre.right != null) q.offer(pre.right);
}
}
}
相关文章推荐
- SecondaryNameNode中的“Inconsistent checkpoint fields”错误原因
- node.js开发平台
- [LeetCode 24] Swap Nodes in Pairs
- Node.js的学习--使用cheerio抓取网页数据
- uiautomator中AccessibilityNodeInfoDumper学习笔记(7)
- SCRIPT5007:无法获取未定义或 null 引用的属性“parentNode”的解决办法
- XML解析类库对比和安装说明
- 数据解析(二)解析XML之GDataXMLNode
- CCSpriteBatchNode
- Node.js liveinjs-gbk 模块 实践总结(一):javascript 的位运算.
- Node.js制作api接口返回json数据
- nodejs File System 文件系统操作函数分类
- hadoop异常“could only be replicated to 0 nodes, instead of 1” 解决
- Nodejs开发框架Express3.0开发手记–从零开始
- hadoop namenode 修改host后 hive无法查询
- Hadoop0.20.203.0在关机重启后,namenode启动报错(/dfs/name is in an inconsistent state)
- Hadoop0.20.203.0在关机重启后,namenode启动报错(/dfs/name is in an inconsistent state)
- 【Eclipse提高开发速度-插件篇】google V8,用于调试Nodejs
- [LeetCode 19] Remove Nth Node From End of List Solutions
- LeetCode-Reverse Nodes in k-Group