您的位置:首页 > Web前端 > Node.js

[LeetCode][JavaScript]Populating Next Right Pointers in Each Node

2015-06-16 23:34 561 查看

Populating Next Right Pointers in Each Node

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


https://leetcode.com/problems/populating-next-right-pointers-in-each-node/

树的按层遍历,其实就是bfs。

维护一个队列放每一层的节点,在每一轮中,把这一层的节点按照顺序连起来。

因为是树的结构,访问过的节点不会再访问,不需要bfs的visited对象。

Populating Next Right Pointers in Each Node II同样的代码就能过,但是II要求不能用额外的空间。

/**
* Definition for binary tree with next pointer.
* function TreeLinkNode(val) {
*     this.val = val;
*     this.left = this.right = this.next = null;
* }
*/
/**
* @param {TreeLinkNode} root
* @return {void} Do not return anything, modify tree in-place instead.
*/
var connect = function(root) {
var queue = [];
queue.push(root);
bfs();

function bfs(){
if(queue.length > 0){
var top = null;
var newQueue = [];
var preNode = null;
while(top = queue.shift()){
if(top.left){
newQueue.push(top.left);
if(preNode){
preNode.next = top.left;
}
preNode = top.left;
}
if(top.right){
newQueue.push(top.right);
if(preNode){
preNode.next = top.right;
}
preNode = top.right;
}
}
if(preNode){
preNode.next = null;
}
queue = newQueue;
bfs();
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: