【树】在二叉树中增加一行

问题描述

给定一个二叉树的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行。

注意,根节点 root 位于深度 1 。

加法规则如下:

给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。
cur 原来的左子树应该是新的左子树根的左子树。
cur 原来的右子树应该是新的右子树根的右子树。
如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。

示例1:

输入: root = [4,2,6,3,1,5], val = 1, depth = 2
输出: [4,1,1,2,null,null,6,3,1,5]

解题思路

采用层序遍历,每遍历一层,校验depth是否满足条件,如果满足条件则增加节点做计算。

示例1中流程如下:

遍历第1层,只有节点4

由于depth要求是第2层,则需要对第1层数据作为根节点,第2层作为叶子节点

-- 执行逻辑,新建节点Node,第1层的节点left指向新建节点Node,将新建节点Node指向原来left指向的左子树。

-- 执行逻辑,新建节点Node,第1层的节点right指向新建节点Node,将新建节点Node指向原来right指向的右子树。

代码实现


import org.example.TreeNode;

import java.util.Deque;
import java.util.LinkedList;

class Solution {
    public TreeNode addOneRow(TreeNode root, int val, int depth) {

        if (depth == 1) {
            TreeNode node = new TreeNode(val);
            node.left = root;
            return node;
        }

        TreeNode root0 = root;
        Deque<TreeNode> deque = new LinkedList<>();
        if (root != null) {
            deque.offer(root);
        }

        int count = 0;
        while (!deque.isEmpty()) {
            count++;
            int sz = deque.size();
            for (int i = 0; i < sz; i++) {
                TreeNode node = deque.poll();

                if (count == depth - 1) {
                    TreeNode left = node.left;
                    TreeNode right = node.right;

                    node.left = new TreeNode(val);
                    node.left.left = left;

                    node.right = new TreeNode(val);
                    node.right.right = right;

                } else {
                    if (node.left != null) {
                        deque.offer(node.left);
                    }
                    if (node.right != null) {
                        deque.offer(node.right);
                    }
                }
            }

        }
        return root0;
    }
}

二叉树TreeNode的实现逻辑:

package org.example;

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode() {
    }

    public TreeNode(int val) {
        this.val = val;
    }

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值