博客
关于我
leetcode623. 在二叉树中增加一行
阅读量:679 次
发布时间:2019-03-17

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

在二叉树中增加一行的问题需要通过按层处理来完成。下面的步骤详细描述了实现过程:

  • 检查边界情况:如果d等于1,则直接在根节点之前添加一个根节点v,将原树作为其左子树,返回这个新根节点。

  • 初始化队列:使用队列存储节点,按照广度优先搜索的顺序处理每一层。初始时队列中只有根节点。

  • 处理到指定层:在处理到第d-1层时,从队列中取出节点处理。对于每个节点,检查是否仍处于错误的层次,并继续处理。对于每个节点,根据规则创建新的v节点的左和右子树。

  • 重构子树:将原来的左子树连接到新节点v的左子节点,原来的右子树连接到新节点的右子节点。如果节点本身不是叶子节点,确保新节点的左右子树不存在冲突。

  • 完成处理并返回结果:当所有指定层的处理完成,返回根节点。

  • 通过这种方法,新添加的层能正确扩展二叉树结构,同时保持原来节点的连接关系。

    leetcode623. 在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为1。在其第 d 层追加一行值为 v 的节点。

    添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。

    将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。

    如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。

    示例 1:

    输入树结构如下:

    4 / \ 2 6 / \ / 3 1 5

    v = 1, d = 2

    输出树结构如下:

    4 / \ 1 1 / \ 2 6/ \ / 3 1 5

    层序遍历

    果然不用递归就会好想很多。遍历到当前层就开始操作,没什么可说的了。

    代码实现:

    代码分析:

    《public TreeNode addOneRow(TreeNode root, int v, int d) {_ if(d == 1) {_ TreeNode newNode = new TreeNode(v); newNode.left = root; return newNode; }_ Queue
    queue = new LinkedList<>(); queue.add(root); int count = 1; while (!queue.isEmpty() & (d - 1) >= count) { int level = queue.size(); for (int i = 0; i < level; i++) { TreeNode currentLevelNode = queue.poll(); // 处理每个当前层节点 if (currentLevelNode != null) { // 检查是否还在目标层 Vienna 9:22 AM给定的二叉树结构中,增加一行值为v的节点需要按照以下步骤进行:1. **理解问题**:在二叉树的第d层插入一行节点v。每个非空节点将扩展成带有新v节点的新父节点。2. **处理特殊情况**: - 若d=1,新节点为根,整棵树作为其左子树。 3. **按层处理**:使用队列实现广度优先搜索,逐层处理每个节点。当处理到第d-1层时,扩展每个节点为新父节点。4. **扩展逻辑**:对于每个处理的节点,将其原左、右子树连接到新v节点,扔出原子树,形成新结构。5. **测试与验证**:确保扩展正确,不影响原有结构,并符合预期的输出结果。通过这种方法,可以在给定深度下正确插入一行新的节点,并保持二叉树的结构完整性。```html

    leetcode623. 在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为1。在其第 d 层追加一行值为 v 的节点。

    添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左子树和右子树。

    将 N 原先的左子树,连接为新节点 v 的左子树;将 N 原先的右子树,连接为新节点 v 的右子树。

    如果 d 的值为 1,深度 d - 1 不存在,则创建一个新的根节点 v,原先的整棵树将作为 v 的左子树。

    示例 1:

    输入树结构如下:

    4 / \ 2 6 / \ / 3 1 5

    v = 1, d = 2

    输出树结构如下:

    4 / \ 1 1 / \ 2 6/ \ / 3 1 5

    层序遍历

    确实不用递归,代码会更清晰。直接按层处理,逻辑易于理解。

    代码实现:

    ```javapublic TreeNode addOneRow(TreeNode root, int v, int d) { if (d == 1) { TreeNode newNode = new TreeNode(v); newNode.left = root; return newNode; } Queue
    queue = new LinkedList<>(); queue.add(root); int count = 1; while (!queue.isEmpty() && (d - 1) >= count) { int level = queue.size(); for (int i = 0; i < level; i++) { TreeNode currentLevelNode = queue.poll(); if (currentLevelNode != null) { TreeNode newNode = new TreeNode(v); newNode.left = currentLevelNode.left; newNode.right = currentLevelNode.right; // 如果节点本身有左或右子树,就需要处理它们的连接 if (currentLevelNode.left != null) { currentLevelNode.left = newNode.left; } if (currentLevelNode.right != null) { currentLevelNode.right = newNode.right; } // 将新节点加入队列处理 queue.add(newNode); } else { // 处理空节点,避免队列出错 queue.add(null); } count++; } } return root;}

    代码说明:

    • 边界处理:直接返回新根节点当d=1。
    • 队列初始化:利用队列按层处理,可以确保每层的节点按顺序处理。
    • 遍历处理:逐层处理节点,检查是否达到目标层,并创建新节点。
    • 子树重构:确保新节点正确连接原有左右子树,维持树的完整性。
    • 层序处理:通过逐层处理,符合题意的层序扩展。

    这种方法确保新添加层符合规则,尽职处理各个节点,保证代码正确性。

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

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | CoTracker3:用于卓越点跟踪的最新 AI 模型
    查看>>
    OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(三):基于特征匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(四):基于Stitcher类拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>
    OpenCV与AI深度学习 | PaddleOCR 2.9 发布, 正式开源文本图像智能分析利器
    查看>>
    OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | YOLOv10在PyTorch和OpenVINO中推理对比
    查看>>
    OpenCV与AI深度学习 | YOLOv11来了:将重新定义AI的可能性
    查看>>
    OpenCV与AI深度学习 | YOLOv8自定义数据集训练实现火焰和烟雾检测(代码+数据集!)
    查看>>
    OpenCV与AI深度学习 | YOLOv8重磅升级,新增旋转目标检测,又该学习了!
    查看>>
    OpenCV与AI深度学习 | 一文带你读懂YOLOv1~YOLOv11(建议收藏!)
    查看>>