12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- export interface TreeNode {
- id: number;
- parentId: number | null;
- title: string;
- children?: TreeNode[];
- }
- export function getTopMenuFragment(tree: TreeNode[], targetId: number): TreeNode | null {
- // 辅助递归函数:查找目标节点并返回其顶层父菜单的完整树结构
- function findTopMenu(node: TreeNode): TreeNode | null {
- // 检查当前节点是否为目标节点
- if (node.id === targetId) {
- return node; // 找到目标节点,返回当前节点
- }
- // 如果当前节点有子节点,递归查找
- if (node.children) {
- for (let i = 0; i < node.children.length; i++) {
- const child = node.children[i];
- const result = findTopMenu(child); // 递归查找子节点
- if (result) {
- // 如果在子节点中找到目标节点,返回当前节点的完整树结构
- return node;
- }
- }
- }
- // 如果当前节点及其子节点中都没有找到目标节点,返回 null
- return null;
- }
- // 遍历顶层节点,查找目标节点的顶层父菜单
- for (const root of tree) {
- const result = findTopMenu(root);
- if (result) {
- return result; // 返回顶层父菜单的完整树结构
- }
- }
- // 如果整个树中都没有找到目标节点,返回 null
- return null;
- }
|