treeUtil.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. export interface TreeNode {
  2. id: number;
  3. parentId: number | null;
  4. title: string;
  5. children?: TreeNode[];
  6. }
  7. export function getTopMenuFragment(tree: TreeNode[], targetId: number): TreeNode | null {
  8. // 辅助递归函数:查找目标节点并返回其顶层父菜单的完整树结构
  9. function findTopMenu(node: TreeNode): TreeNode | null {
  10. // 检查当前节点是否为目标节点
  11. if (node.id === targetId) {
  12. return node; // 找到目标节点,返回当前节点
  13. }
  14. // 如果当前节点有子节点,递归查找
  15. if (node.children) {
  16. for (let i = 0; i < node.children.length; i++) {
  17. const child = node.children[i];
  18. const result = findTopMenu(child); // 递归查找子节点
  19. if (result) {
  20. // 如果在子节点中找到目标节点,返回当前节点的完整树结构
  21. return node;
  22. }
  23. }
  24. }
  25. // 如果当前节点及其子节点中都没有找到目标节点,返回 null
  26. return null;
  27. }
  28. // 遍历顶层节点,查找目标节点的顶层父菜单
  29. for (const root of tree) {
  30. const result = findTopMenu(root);
  31. if (result) {
  32. return result; // 返回顶层父菜单的完整树结构
  33. }
  34. }
  35. // 如果整个树中都没有找到目标节点,返回 null
  36. return null;
  37. }