如何在递归函数中跳过最后一次操作,排除树结构的末尾节点
解决方案
你当前的递归函数逻辑是从传入的目标节点向上遍历父节点拼接路径,要排除最末尾的节点(也就是你传入的初始目标节点),可以用下面两种方案实现:
方案1:修改递归逻辑,新增初始调用标记
通过新增可选参数标记是否是首次调用,首次调用时跳过当前节点的拼接逻辑即可:
export function getFullName(treeNode: TreeNode, fullname = '', isInitial = true): string { if (treeNode.parent) { // 非首次调用才拼接当前节点名称 if (!isInitial) { fullname = fullname ? `${treeNode.name}/${fullname}` : treeNode.name; } // 递归父节点时关闭初始标记 fullname = getFullName(treeNode.parent, fullname, false); } return fullname; }
效果示例
假设树结构为 根节点A → 节点B → 节点C,原函数传入C得到路径 A/B/C,修改后传入C得到路径 A/B,符合排除最后一个节点的需求。
方案2:不修改原有递归逻辑,后置截断路径
如果不想侵入原有递归代码,也可以拿到完整路径后做字符串截断处理:
// 调用原有函数拿到完整路径 const fullPath = getFullName(treeNode); // 去掉最后一段路径 const pathWithoutLast = fullPath.split('/').slice(0, -1).join('/');
注意:该方案需要额外兼容路径只有一段、路径为空的边界场景,适合临时调整需求的场景使用。
内容的提问来源于stack exchange,提问作者user15361861
相关产品推荐
相关产品推荐

