跳至主要內容

二叉树的下一个结点

微信公众号:储凡2023/2/11小于 1 分钟

二叉树的下一个结点

题目链接

题目描述

刷题思路

代码实现

/*
 * @Description: 【中等】二叉树的下一个结点
 * @Version: Beta1.0
 * @Author: 微信公众号:储凡
 * @Date: 2021-05-11 15:38:02
 * @LastEditors: 微信公众号:储凡
 * @LastEditTime: 2021-05-11 15:40:20
 */

/* function TreeLinkNode(x){
    this.val = x;
    this.left = null;
    this.right = null;
    this.next = null;
} */
function getNext(pNode) {
  // 中序遍历 ---> 左-根(pNode)-右
  // 所以这里pNode的下一个结点,要么是pNode右子树的第一个最左结点(左边的叶子结点)
  // 但是如果pNode的右子树为空,则pNode的下个结点,则为第一个左子树指向pNode的祖先结点

  if (pNode.right !== null) {
    // 存在右子树,寻找右子树的最左结点
    let rightNode = pNode.right
    while (rightNode.left !== null) {
      // 一直向左找
      rightNode = rightNode.left
    }
    // 跳出循环的时候,right_node.left==null;即:right_node为叶子结点
    return rightNode
  }
  else {
    // 右子树为空,则向上找
    while (pNode.next !== null) {
      const parentNode = pNode.next
      if (parentNode.left === pNode) {
        return parentNode
      }
      // 父结点的左子树不是指向给定的结点的话,则继续往上寻找父结点
      pNode = pNode.next
    }
  }

  // 都找不到,则返回null
  return null
}

一些建议

更新日志

2024/7/29 15:43
查看所有更新日志
  • 5a2b2-feat: 移除markdown-cli模块,采用prettier校验文档格式
  • c0f2d-refactor: 升级vuepress相关版本,优化项目结构 (#137)
  • 06596-feat: 算法相关文档新增固定链接,优化导入代码配置
  • 9b9e4-feat: 算法相关文档更新,删除讨论链接 (#88)
  • b0275-feat(markdownlint-cli): 添加markdown文档校验,支持lint脚本自动格式化文档
  • 5f1e1-feat: 导航栏、侧边栏内容修改,新增目录对应的文档
  • 02ab1-style: 文档目录调整,修改mdEnhance配置
  • 8de1a-feat: 剑指算法文档更新,修改目录结构
  • d0347-docs(algorithm): 新增模版格式
  • ced18-docs: 更新一些文档,优化导航栏
  • a23ce-refactor: 新增manuscript目录,优化文稿结构
  • 80f08-feat(algorithm): 算法文档更新,侧边栏优化
  • e34c0-style(code): 代码风格eslint格式化,新增部分文档
  • 74aa9-docs(algorithm): 新增一些文档
  • 3c22c-refactor: 新增Eslint配置,修改相关代码风格
  • 9bbe9-feat: 修改导航栏结构,添加文档
  • e4c74-feat: 新增算法源码
贡献者: chu fan,Chu Fan,chufan,142vip.cn,chufan443