博客
关于我
LeetCode 116填充每个节点的下一个右侧结点指针
阅读量:340 次
发布时间:2019-03-04

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

为了解决这个问题,我们需要填充二叉树中每个节点的 next 指针,使其指向下一个右侧节点。我们需要在常量级额外空间内完成这个任务,这意味着我们不能使用额外的数据结构来存储节点信息。

方法思路

我们可以使用一种递归的方法来处理这个问题。具体步骤如下:

  • 初始化指针:从根节点开始,初始化指针 p 为根节点。
  • 遍历节点:在每次循环中,处理当前节点 p 的右边节点,并将 pnext 指针指向该右边节点。
  • 更新指针:将指针 p 更新为右边节点的左边节点,这样我们就可以处理下一层的最左边节点。
  • 终止条件:当 p 为空或 p 的左边节点为空时,终止循环。
  • 这种方法确保了我们能够在常量级额外空间内完成任务,因为我们只使用了几个指针变量,而没有存储整个层序结构。

    解决代码

    class Solution {    public Node* connect(Node* root) {        if (!root) return null;        Node* p = root;        while (p && p->left != null) {            p->next = p->right;            p = p->right->left;        }        return root;    }}

    代码解释

  • 初始化检查:首先检查根节点是否为空,如果为空则返回 null
  • 指针初始化:将指针 p 设为根节点 root
  • 循环处理:在 p 不为空且 p 的左边节点不为空的情况下,执行循环。
    • 设置下一个节点:将 pnext 指针指向 p 的右边节点。
    • 更新指针:将 p 更新为右边节点的左边节点,这样可以处理下一层的最左边节点。
  • 返回根节点:当循环终止时,返回根节点 root
  • 这种方法确保了每个节点的 next 指针都被正确填充,形成了一个链表结构,每个节点都指向下一个右侧节点。

    转载地址:http://dybr.baihongyu.com/

    你可能感兴趣的文章
    一、硬件防火墙
    查看>>
    Javaweb jQuery功能练习
    查看>>
    余生,愿你能靠近那些正能量的人——
    查看>>
    初学QT
    查看>>
    IOC容器_Bean管理xml方式
    查看>>
    蓝桥杯入门练习题斐波那契数列
    查看>>
    (Java基础类库 )System类
    查看>>
    context:include-filter与exclude-filte控制扫描组件
    查看>>
    【SSL】1072砝码称重
    查看>>
    js数据结构--队列--常见操作
    查看>>
    JS数据结构--单向链表--常见操作
    查看>>
    【SSL】1606&【洛谷】P2014选课
    查看>>
    JS数据结构--双向链表--常见操作
    查看>>
    c++的内存管理
    查看>>
    全排列(深度优先搜索+递归)
    查看>>
    多项式插值法的Python程序
    查看>>
    vue.js常用指令及用法
    查看>>
    vuex的核心概念和运行机制
    查看>>
    SSLOJ1692 USACO 3.2 Magic Squares 魔板&P2730
    查看>>
    P4305 [JLOI2011]不重复数字
    查看>>