leetcode117~Populating Next Right Pointers in Each Node II

2024-02-06 03:48

本文主要是介绍leetcode117~Populating Next Right Pointers in Each Node II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Follow up for problem “Populating Next Right Pointers in Each Node”.

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

You may only use constant extra space.
For example,
Given the following binary tree,
1
/ \
2 3
/ \ \
4 5 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ \
4-> 5 -> 7 -> NULL

详细的解释过程在程序中。第二种解法比较简洁~关键在于引入了一个dummyNode节点。通常来说,二叉树中引入dummyNode节点是为了使二叉树中的所有节点都是处于同一个地位的,因为这时会使dummyNode节点的指针指向头节点。

本题中引入了dummyNode节点,使pre节点每次从dummyNode节点开始进行遍历,这样dummyNode节点的next指针会始终指向每一层的最左节点,省去了在程序中对最左节点的判断和查询过程。

public class PopulatingNextRightPointers117 {

/** 思路与上题类似,同样是在遍历上层节点时,去完成下一层节点的链接过程* 不同的是,这里只是一棵普通的二叉树了。首先在确定next节点的值时,需要对左右孩子都进行判断,找到最左节点* 其次,要判断是有左孩子还是右孩子,再进行相应的链接*/public void connect(TreeLinkNode root) {if(root==null) return;TreeLinkNode parent =root;//负责对每层节点进行遍历并链接TreeLinkNode pre;;//指向每层的最左节点TreeLinkNode next;;while(parent!=null) {pre = null;next = null;//对每层节点的遍历循环while(parent!=null) {//对next赋值if(next==null) {if(parent.left!=null) {next = parent.left;} else {//不管右孩子节点是否为空next = parent.right;}}if(parent.left!=null) {if(pre!=null) {//跨父节点进行链接pre.next = parent.left;pre = pre.next;} else {pre = parent.left;}}if(parent.right!=null) {if(pre!=null) {//同一个父节点的两个孩子进行链接pre.next = parent.right;pre = pre.next;} else {pre = parent.right;}}parent = parent.next;}parent = next;}}/** 引用一个节点dummyNode,使它的next节点指向最左节点,这样就不用去判断寻找最左节点* 一般来说,dummyNode的下一节点指向头节点,这样就能使二叉树中的所有节点(包括头节点)都是一样的,因为这样使头节点有了前驱*/public void connect2(TreeLinkNode root) {if(root == null) return ;TreeLinkNode parent = root;while(parent!=null) {TreeLinkNode dummyNode = new TreeLinkNode(-1);TreeLinkNode pre = dummyNode;while(parent!=null) {if(parent.left!=null) {pre.next = parent.left;pre = parent.left;}if(parent.right!=null) {pre.next = parent.right;pre = parent.right;}parent = parent.next;}parent = dummyNode.next;}}

}

这篇关于leetcode117~Populating Next Right Pointers in Each Node II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/683049

相关文章

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

在Debian 8上安装Node.js的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Node.js 是一个通用编程的 JavaScript 平台,允许用户快速构建网络应用程序。通过在前端和后端都使用 JavaScript,开发可以更加一致,并且可以在同一个系统中设计。 在本指南中,您将在 Debian 8 服务器上安装 Node.js。Debian 8 包含一个版本的