leetcode
leetcode 3051 ~ 3100
装饰树

装饰树

难度:

标签:

题目描述

English description is not available for the problem. Please switch to Chinese.

代码结果

运行时间: 204 ms, 内存: 38.5 MB


/*
 * 题目思路:
 * 使用Java Stream API,我们可以创建一种更为函数式的方式来处理这个问题。
 * 通过Stream,我们可以使用递归来处理树的每个节点。
 * 对于每一个节点,如果它有左子节点,则在它和左子节点之间插入一个值为-1的节点;
 * 如果它有右子节点,则在它和右子节点之间插入一个值为-1的节点。
 */

import java.util.function.Function;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class Solution {
    public TreeNode addDecorations(TreeNode root) {
        if (root == null) return null;
        Function<TreeNode, TreeNode> decorate = (TreeNode node) -> {
            if (node == null) return null;
            if (node.left != null) {
                TreeNode left = node.left;
                node.left = new TreeNode(-1);
                node.left.left = decorate.apply(left);
            }
            if (node.right != null) {
                TreeNode right = node.right;
                node.right = new TreeNode(-1);
                node.right.right = decorate.apply(right);
            }
            return node;
        };
        return decorate.apply(root);
    }
}

解释

方法:

此题的核心思路是在原二叉树的每个节点与其子节点之间插入一个值为-1的新节点。递归方法是用来遍历每个节点,并在遍历过程中插入新节点。如果当前节点有左子节点,则在当前节点的左子节点前插入一个值为-1的新节点,并将原左子节点变为新插入节点的左子节点。同样的处理适用于右子节点。递归继续对新插入的(值为-1的)节点的左或右子节点(视原始子节点位置而定)调用同样的过程,直到所有的子节点都被处理完毕。

时间复杂度:

O(n)

空间复杂度:

O(n)

代码细节讲解

🦆
在这个递归函数中,对于叶子节点直接返回而不插入-1节点是基于什么考虑?
在本题的逻辑中,只有在父节点与子节点之间才需要插入值为-1的新节点。对于叶子节点,由于它们没有子节点,因此不存在需要在其与子节点之间插入新节点的情况。直接返回叶子节点,是为了避免在没有子节点的节点后面错误地添加额外的节点,保持树的结构正确且符合题目要求。
🦆
插入-1节点后,为什么选择继续递归调用`expandBinaryTree`函数处理新插入的-1节点的子节点,而不是原始的子节点?
在插入-1的新节点后,新节点实际上取代了原节点作为子节点的位置,而原来的子节点现在成为了新插入的-1节点的子节点。递归调用`expandBinaryTree`函数处理新插入节点的子节点是为了保证每个原有的父子关系中间都正确地插入了-1节点。如果递归调用原始的子节点而非新插入的节点,那么新插入的-1节点的子节点将不会被递归处理,从而导致新插入的节点没有正确地连接到树的其余部分。
🦆
如果根节点为空,函数直接返回None。这种处理方式是否适用于所有二叉树相关的问题,还是特定于本题的要求?
如果根节点为空,则表明二叉树不存在,因此返回None是对此情况的合理处理。这种处理方式通常适用于许多二叉树相关的问题,因为它处理了树为空的边界情况。特别是在涉及到递归操作的二叉树问题中,检查根节点是否为空是一个常见的安全措施,避免在空树上执行进一步的操作。因此,这不仅是特定于本题的要求,而是一种普遍适用的处理方式。

相关问题