牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2...ak。 如有一棵二叉树,删除其中的第3层节点

题目:牛牛有一棵n个节点的二叉树,该二叉树每个节点的权值为1。牛牛想要删掉该树其中的k层节点,删除序列为a1,a2…ak。
如有一棵二叉树,删除其中的第3层节点
在这里插入图片描述

思路:
层序遍历,遍历时对节点依次进行如下操作:
1.若当前节点上一层应该删除且这一层不用删除,将该节点填入答案。
2.将当前节点左右儿子填入遍历队列。
3.若当前节点下一层需要删除时,断开当前节点左右儿子的连接。
特殊处理:遍历前,将第0层(根节点的上层,在树中不存在)设置为需要删除,在对根节点执行操作1时,若第1层不需要删除,会将根节点填入答案,以免漏掉根节点。

function deleteLevel (root, a) {
		//要删除的层数队列,0需要手动添加,否则会漏掉root节点
        let set = new Set();
        for (let num of a) set.add(num);
        set.add(0);
        let queue = []
        let list = []
        queue.push(root);
        let depth = 0;
        
        while (queue.length!==0) {
            let size = queue.length;
            depth++;
            while (size-- > 0) {
                let node = queue.shift();
                if (node.left != null)
                    queue.push(node.left);
                if (node.right != null) 
                    queue.push(node.right);
                if (set.has(depth - 1) && !set.has(depth))
                    list.push(node);
                if (!set.has(depth) && set.has(depth + 1)) {
                    node.left = null;
                    node.right = null;
                }
            }
        }
        return list;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
给定长度为 n 的无序数字数组,在 JavaScript 中,我们可以利用这个数组构建一个二叉树。其中,数组的每个数字代表二叉树的叶子节点权值。 首先,我们需要创建一个二叉树节点类,每个节点包含一个值属性和左右子节点属性。接下来,我们可以通过遍历数组,逐个创建叶子节点,并按照二叉树的规则,将节点插入到合适的位置。 具体实现步骤如下: 1. 创建一个节点类,包含值属性(value)、左子节点属性(left)和右子节点属性(right)。 2. 定义一个函数,用于构建二叉树。函数输入为一个无序的数字数组和数组的长度 n。 3. 根据数组的第一个数字创建根节点,并将其作为当前节点。 4. 遍历数组中的其他数字,依次创建叶子节点。 5. 对于每个叶子节点,从根节点开始,根据当前节点的值与叶子节点的值的大小关系,将叶子节点插入到左子树或右子树中。 6. 重复步骤 4-5,直到遍历完整个数组。 7. 返回根节点,即为构建好的二叉树的根节点。 以下是一个简化的示例代码: ``` class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } } function buildBinaryTree(arr, n) { if (n === 0) { return null; } const root = new Node(arr[0]); for (let i = 1; i < n; i++) { const leaf = new Node(arr[i]); let current = root; while (true) { if (leaf.value < current.value) { if (current.left) { current = current.left; } else { current.left = leaf; break; } } else { if (current.right) { current = current.right; } else { current.right = leaf; break; } } } } return root; } // 示例用法 const arr = [5, 3, 7, 1, 4, 6, 8]; const n = arr.length; const root = buildBinaryTree(arr, n); // 打印结果,方便进行验证 console.log(root); ``` 以上是通过给定长度为 n 的无序数字数组,构建一个二叉树的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值