// 问题综述:有以下组织节点数据,回答下面问题(用 TS 实现) const orgTreeData = [ { username: "0-0", userid: "0-0", children: [ { username: "0-0-0", userid: "0-0-0", children: [ { username: "0-0-0-0", userid: "0-0-0-0" }, { username: "0-0-0-1", userid: "0-0-0-1" }, { username: "【此处写你的姓名】", userid: "0-0-0-2" } ] }, { username: "0-0-1", userid: "0-0-1" }, { username: "0-0-2", userid: "0-0-2" } ] }, { username: "0-1", userid: "0-1", children: [ { username: "0-1-0-0", userid: "0-1-0-0" }, { username: "0-1-0-1", userid: "0-1-0-1" }, { username: "0-1-0-2", userid: "0-1-0-2" } ] }, { username: "0-2", userid: "0-2" } ] // 问题一:用 ts 描述 treeData 的数据结构 type TreeNode = { username: string; userid: string; children?: TreeNode[]; } type TreeData = TreeNode[]; let treeData: TreeData = [ { username: "0-0", userid: "0-0", children: [ { username: "0-0-0", userid: "0-0-0", children: [ { username: "0-0-0-0", userid: "0-0-0-0" }, { username: "0-0-0-1", userid: "0-0-0-1" }, { username: "【此处写你的姓名】", userid: "0-0-0-2" } ] }, { username: "0-0-1", userid: "0-0-1" }, { username: "0-0-2", userid: "0-0-2" } ] }, { username: "0-1", userid: "0-1", children: [ { username: "0-1-0-0", userid: "0-1-0-0" }, { username: "0-1-0-1", userid: "0-1-0-1" }, { username: "0-1-0-2", userid: "0-1-0-2" } ] }, { username: "0-2", userid: "0-2" } ] console.log(treeData); // 问题一:结果输出 // 问题二:用 ts 写一个根据用户名称,查找 userid 的方法。请将你的姓名随机写到上述数据中,用该方法查找出你的姓名对应的 userid const queryUserIdByUserName: (orgTreeData: TreeData, username: string) => string = function(orgTreeData, username) { let userid: string = ''; orgTreeData.forEach(orgItem => { if (orgItem.username === username) { userid = orgItem.userid; } if (orgItem.children && orgItem.children.length) { let tempId: string = queryUserIdByUserName(orgItem.children, username); if (tempId) userid = tempId; } }) return userid; } console.log(queryUserIdByUserName(treeData, '【此处写你的姓名】')); // 问题二:结果输出 // 问题三:用 ts 写一个获取最长路径的方法。如以上示例的数据,最长路径为["0-0", "0-0-0", "0-0-0-0"](由 userid 组成,多个最长时返回任意一个即可) const queryMaxPathHandle: (orgTreeData: TreeData) => string[] = function(orgTreeData) { let deepPathList: string[] = []; // 路径集合 let maxDeepPath = 0; // 最大路径层级 // 最深优先计算 function depthFirstHandle(orgItem: { userid: string, username: string, children?: TreeData }, currentPath: string[], depth: number) { currentPath.push(orgItem.userid); if (depth > maxDeepPath) { deepPathList = [...currentPath]; maxDeepPath = depth; } if (orgItem.children && orgItem.children.length > 0) { for (let child of orgItem.children) { depthFirstHandle(child, currentPath, depth + 1); } } currentPath.pop(); } for (const orgItem of orgTreeData) { depthFirstHandle(orgItem, [], 1); } return deepPathList; } console.log(queryMaxPathHandle(treeData)); // 问题三:结果输出
发表评论