博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode][JavaScript]Populating Next Right Pointers in Each Node
阅读量:5091 次
发布时间:2019-06-13

本文共 2232 字,大约阅读时间需要 7 分钟。

 

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

 

 

 


 

 

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

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

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

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

1 /** 2  * Definition for binary tree with next pointer. 3  * function TreeLinkNode(val) { 4  *     this.val = val; 5  *     this.left = this.right = this.next = null; 6  * } 7  */ 8 /** 9  * @param {TreeLinkNode} root10  * @return {void} Do not return anything, modify tree in-place instead.11  */12 var connect = function(root) {13     var queue = [];14     queue.push(root);15     bfs();16 17     function bfs(){18         if(queue.length > 0){19             var top = null;20             var newQueue = [];21             var preNode = null;22             while(top = queue.shift()){23                 if(top.left){24                     newQueue.push(top.left);25                     if(preNode){26                         preNode.next = top.left;27                     }28                     preNode = top.left;29                 }30                 if(top.right){31                     newQueue.push(top.right);32                     if(preNode){33                         preNode.next = top.right;34                     }35                     preNode = top.right;36                 }37             }38             if(preNode){39                 preNode.next = null;40             }41             queue = newQueue;42             bfs();43         }44     }45 };

 

 

 

转载于:https://www.cnblogs.com/Liok3187/p/4582146.html

你可能感兴趣的文章
Java类加载过程
查看>>
vue----封装长按指令
查看>>
ElasticSearch5.2.2 安装配置
查看>>
python之数据结构链表实现方式
查看>>
Co. - VMware - vSphere
查看>>
java02实验:方法
查看>>
Qt样式表之一:Qt样式表和盒子模型介绍
查看>>
自定义HTML标签属性
查看>>
USACO 5.3 Window Area
查看>>
_CRT_NONSTDC…与_CRT_SECURE…
查看>>
图标字体的使用(fontello.com)字体推荐及使用技巧
查看>>
Asp.Net_ 服务端向客户端写JavaScript脚本
查看>>
DirectX11--深入理解与使用2D纹理资源
查看>>
针对WebLogic Server 12.1.3版本打补丁
查看>>
全网备份
查看>>
在Mac OS上搭建本地服务器
查看>>
tyvj1938 最优战舰
查看>>
IDEA常用插件记录
查看>>
numpy之sum
查看>>
(动态规划)免费馅饼--hdu--1176
查看>>