You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现非二叉树节点的层级计算方法?

问题:实现树节点的getLevel方法

给定非二叉树结构:

root
                         /      \
                        A        B
                       / \      / \
                      C   D    E   F
                    / \ \
                   G  H  I

需要为树中的节点实现getLevel方法,调用时返回节点所在层级(根节点层级为0,例如C.getLevel()应返回2)。每个节点仅包含name(节点名称)和children(直接子节点数组)两个属性。

尝试用递归解决但思路有误,初始代码如下:

getLevel(level = 0) {
    if (this.children.length === 0) {
        return level;
    }

    for (let child of this.children) {
        level = child.getLevel(level + 1);
    }
}

解答

你的代码逻辑完全搞反了:当前代码是递归遍历子节点,最后返回的是当前节点最深子节点的层级,根本不是当前节点自己的层级(比如调用C.getLevel()会返回3,而不是预期的2)。

要实现正确的getLevel方法,核心是找到当前节点在整个树中的位置,有两种可行方案:

方案1:给节点添加父节点引用(推荐)

如果可以在构建树时给每个节点添加parent属性,就能通过递归向上追溯父节点计算层级:

节点的getLevel实现

getLevel() {
    // 根节点没有父节点,直接返回0
    if (!this.parent) {
        return 0;
    }
    // 当前节点层级 = 父节点层级 + 1
    return this.parent.getLevel() + 1;
}

构建树时设置parent属性示例

// 构建根节点
const root = { name: 'root', children: [], parent: null };
// 构建子节点并绑定父节点
const A = { name: 'A', children: [], parent: root };
root.children.push(A);
const C = { name: 'C', children: [], parent: A };
A.children.push(C);
// 其他节点以此类推...

这种方式效率更高,每次调用getLevel最多递归到根节点,时间复杂度更低。

方案2:不修改节点结构,从根节点遍历查找

如果不能修改节点原有结构,可以实现工具函数从根节点递归遍历,找到目标节点时返回对应层级:

工具函数+节点方法实现

// 工具函数:从根节点查找目标节点的层级
function findNodeLevel(root, targetNode, currentLevel = 0) {
    // 找到目标节点,返回当前层级
    if (root === targetNode) {
        return currentLevel;
    }
    // 遍历所有子节点递归查找
    for (const child of root.children) {
        const level = findNodeLevel(child, targetNode, currentLevel + 1);
        if (level !== -1) {
            return level;
        }
    }
    // 当前分支未找到目标节点,返回-1
    return -1;
}

// 节点的getLevel方法(需要传入根节点)
getLevel(root) {
    return findNodeLevel(root, this);
}

调用示例

// 假设root是树的根节点
console.log(C.getLevel(root)); // 输出2

这种方式每次调用都需要从根节点遍历整个树,时间复杂度为O(n),适合无法修改节点结构的场景。


内容的提问来源于stack exchange,提问作者Luk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:42:47