企业内部部门的最大层级2026 华为OD机试真题 5月30日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述企业的组织架构以树形结构表示每个节点包含left: 左子部门第一个子部门right: 右子部门第二个子部门为了优化管理结构实现扁平化管理需要计算企业的最大管理层级深度。 请计算企业的部门层级的最大深度。注意1、一个部门最多能有 2 个直属的子部门二叉树2、输入由数字和特殊符号#组成的序列总结点数不超过 1024 个。数字表示该位置有子部门#表示该位置无子部门即无此节点。输入描述输入由数字和特殊符号#组成的序列输出描述最大层级深度示例1输入1,#,2,#,3,#,4,#,5输出5说明单链结构深度为5示例2输入1,2,3,4,5,6,7,8,9输出4说明完全二叉树深度为4示例3输入1,2,#输出2说明简单二叉树深度为2解题思路本题是一个层序遍历 (BFS)问题将数组视为二叉树的层序遍历序列。关键概念输入是二叉树的层序遍历序列“#” 表示该位置没有节点需要计算从根到最深叶节点的层数算法步骤初始化将根节点深度(1)加入队列层序遍历弹出队首节点检查左子节点若存在加入队列更新最大深度检查右子节点若存在加入队列更新最大深度返回结果队列为空时返回最大深度复杂度分析时间复杂度: O(n)遍历所有节点空间复杂度: O(n)队列存储Javaimportjava.util.*;publicclassMain{/** * 计算二叉树的最大深度 * * param nodes 二叉树层序遍历数组 * return 最大深度 */publicstaticintmaxDepth(String[]nodes){// 空树或根节点为空if(nodesnull||nodes.length0||#.equals(nodes[0])){return0;}// 队列中存储当前节点的深度QueueIntegerqueuenewLinkedList();queue.offer(1);intindex1;intmaxDepth1;// 按层序数组模拟 BFSwhile(!queue.isEmpty()){intdepthqueue.poll();// 处理左子节点if(indexnodes.length){if(!#.equals(nodes[index])){queue.offer(depth1);maxDepthMath.max(maxDepth,depth1);}index;}// 处理右子节点if(indexnodes.length){if(!#.equals(nodes[index])){queue.offer(depth1);maxDepthMath.max(maxDepth,depth1);}index;}}returnmaxDepth;}/** * 解析输入字符串 * 格式: 1,#,2,#,3,#,4,#,5 */publicstaticString[]parseInput(Stringline){lineline.trim();if(line.isEmpty()){returnnewString[0];}returnline.split(,);}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);Stringlinescanner.nextLine().trim();String[]nodesparseInput(line);intresultmaxDepth(nodes);System.out.println(result);scanner.close();}}PythonfromcollectionsimportdequefromtypingimportListdefmax_depth(nodes:List[str])-int: 计算二叉树的最大深度 算法思路层序遍历 (BFS) - 使用队列存储当前节点的深度 - 按层序遍历数组模拟二叉树 - 记录最大深度 时间复杂度: O(n) 空间复杂度: O(n) # 空树或根节点为空ifnotnodesornodes[0]#:return0# 队列中存储当前节点的深度queuedeque([1])index1max_depth_val1# 按层序数组模拟 BFSwhilequeue:depthqueue.popleft()# 处理左子节点ifindexlen(nodes):ifnodes[index]!#:queue.append(depth1)max_depth_valmax(max_depth_val,depth1)index1# 处理右子节点ifindexlen(nodes):ifnodes[index]!#:queue.append(depth1)max_depth_valmax(max_depth_val,depth1)index1returnmax_depth_valdefparse_input(line:str)-List[str]:解析输入: 1,#,2,#,3,#,4,#,5lineline.strip()ifnotline:return[]return[x.strip()forxinline.split(,)]defmain():主函数lineinput().strip()nodesparse_input(line)resultmax_depth(nodes)print(result)if__name____main__:main()JavaScript/** * 计算二叉树的最大深度 * * param {string[]} nodes - 二叉树层序遍历数组 * returns {number} 最大深度 */functionmaxDepth(nodes){// 空树或根节点为空if(!nodes||nodes.length0||nodes[0]#){return0;}// 队列中存储当前节点的深度constqueue[];queue.push(1);letindex1;letmaxDepthVal1;// 按层序数组模拟 BFSwhile(queue.length0){constdepthqueue.shift();// 处理左子节点if(indexnodes.length){if(nodes[index]!#){queue.push(depth1);maxDepthValMath.max(maxDepthVal,depth1);}index;}// 处理右子节点if(indexnodes.length){if(nodes[index]!#){queue.push(depth1);maxDepthValMath.max(maxDepthVal,depth1);}index;}}returnmaxDepthVal;}/** * 解析输入字符串 * 格式: 1,#,2,#,3,#,4,#,5 */functionparseInput(line){lineline.trim();if(!line){return[];}returnline.split(,).map(xx.trim());}// 主函数 - 程序入口constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});rl.on(line,(line){constnodesparseInput(line);constresultmaxDepth(nodes);console.log(result);rl.close();});C#includeiostream#includevector#includestring#includequeue#includesstream#includealgorithmusingnamespacestd;stringtrim(conststrings){intleft0;intright(int)s.size()-1;while(leftrights[left] ){left;}while(rightlefts[right] ){right--;}returns.substr(left,right-left1);}vectorstringsplit(conststringdata){vectorstringnodes;string item;stringstreamss(data);while(getline(ss,item,,)){nodes.push_back(trim(item));}returnnodes;}intmaxDepth(constvectorstringnodes){if(nodes.empty()||nodes[0]#){return0;}queueintq;q.push(1);intindex1;intans1;while(!q.empty()){intdepthq.front();q.pop();if(index(int)nodes.size()){if(nodes[index]!#){q.push(depth1);ansmax(ans,depth1);}index;}if(index(int)nodes.size()){if(nodes[index]!#){q.push(depth1);ansmax(ans,depth1);}index;}}returnans;}intmain(){string data;getline(cin,data);if(data.empty()){cout0endl;return0;}vectorstringnodessplit(data);coutmaxDepth(nodes)endl;return0;}Gopackagemainimport(bufiofmtosstrings)/** * 计算二叉树的最大深度 */funcmaxDepth(nodes[]string)int{// 空树或根节点为空iflen(nodes)0||nodes[0]#{return0}// 使用队列存储索引和深度typeNodeDepthstruct{idxintdepthint}queue:make([]NodeDepth,0)queueappend(queue,NodeDepth{0,1})maxDepthVal:1forlen(queue)0{node:queue[0]queuequeue[1:]ifnode.depthmaxDepthVal{maxDepthValnode.depth}// 左子节点索引leftIdx:2*node.idx1ifleftIdxlen(nodes)nodes[leftIdx]!#{queueappend(queue,NodeDepth{leftIdx,node.depth1})}// 右子节点索引rightIdx:2*node.idx2ifrightIdxlen(nodes)nodes[rightIdx]!#{queueappend(queue,NodeDepth{rightIdx,node.depth1})}}returnmaxDepthVal}/** * 解析输入字符串 */funcparseInput(linestring)[]string{linestrings.TrimSpace(line)ifline{return[]string{}}parts:strings.Split(line,,)result:make([]string,len(parts))fori,p:rangeparts{result[i]strings.TrimSpace(p)}returnresult}funcmain(){scanner:bufio.NewScanner(os.Stdin)scanner.Scan()line:scanner.Text()nodes:parseInput(line)result:maxDepth(nodes)fmt.Println(result)}C语言#includestdio.h#includestring.h#includestdlib.h#includectype.h#defineMAX_N1024#defineMAX_LEN10000voidtrim(char*s){intleft0;intrightstrlen(s)-1;while(leftrightisspace((unsignedchar)s[left])){left;}while(rightleftisspace((unsignedchar)s[right])){right--;}intindex0;for(intileft;iright;i){s[index]s[i];}s[index]\0;}intmaxDepth(charnodes[][32],intn){if(n0||strcmp(nodes[0],#)0){return0;}intqueue[MAX_N];intfront0;intrear0;queue[rear]1;intindex1;intans1;while(frontrear){intdepthqueue[front];if(indexn){if(strcmp(nodes[index],#)!0){queue[rear]depth1;if(depth1ans){ansdepth1;}}index;}if(indexn){if(strcmp(nodes[index],#)!0){queue[rear]depth1;if(depth1ans){ansdepth1;}}index;}}returnans;}intmain(){chardata[MAX_LEN];if(fgets(data,sizeof(data),stdin)NULL){printf(0\n);return0;}data[strcspn(data,\n)]\0;if(strlen(data)0){printf(0\n);return0;}charnodes[MAX_N][32];intn0;char*tokenstrtok(data,,);while(token!NULLnMAX_N){trim(token);strcpy(nodes[n],token);tokenstrtok(NULL,,);}printf(%d\n,maxDepth(nodes,n));return0;}完整用例用例1输入1,#,2,#,3,#,4,#,5用例2输入1,2,3,4,5,6,7,8,9用例3输入1,2,#用例4输入#用例5输入1,#,#用例6输入1,2,3,#,#,4,5用例7输入1,2,#,3,#,4用例8输入1,2,3,4,#,#,5用例9输入1,#,2,3,#,#用例10输入1,2,3,4,5,6,#,#,7文章目录**企业内部部门的最大层级**题目描述输入描述输出描述示例1示例2示例3解题思路算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10
5.30华为OD机试真题 新系统 - 企业内部部门的最大层级 (Java/Py/C/C++/Js/Go)
企业内部部门的最大层级2026 华为OD机试真题 5月30日华为OD上机新系统考试真题 100 分题型点击查看华为 OD 机试真题完整目录2026最新华为OD机试新系统卷 双机位C卷 真题题库目录全覆盖题库 逐点算法考点详解题目描述企业的组织架构以树形结构表示每个节点包含left: 左子部门第一个子部门right: 右子部门第二个子部门为了优化管理结构实现扁平化管理需要计算企业的最大管理层级深度。 请计算企业的部门层级的最大深度。注意1、一个部门最多能有 2 个直属的子部门二叉树2、输入由数字和特殊符号#组成的序列总结点数不超过 1024 个。数字表示该位置有子部门#表示该位置无子部门即无此节点。输入描述输入由数字和特殊符号#组成的序列输出描述最大层级深度示例1输入1,#,2,#,3,#,4,#,5输出5说明单链结构深度为5示例2输入1,2,3,4,5,6,7,8,9输出4说明完全二叉树深度为4示例3输入1,2,#输出2说明简单二叉树深度为2解题思路本题是一个层序遍历 (BFS)问题将数组视为二叉树的层序遍历序列。关键概念输入是二叉树的层序遍历序列“#” 表示该位置没有节点需要计算从根到最深叶节点的层数算法步骤初始化将根节点深度(1)加入队列层序遍历弹出队首节点检查左子节点若存在加入队列更新最大深度检查右子节点若存在加入队列更新最大深度返回结果队列为空时返回最大深度复杂度分析时间复杂度: O(n)遍历所有节点空间复杂度: O(n)队列存储Javaimportjava.util.*;publicclassMain{/** * 计算二叉树的最大深度 * * param nodes 二叉树层序遍历数组 * return 最大深度 */publicstaticintmaxDepth(String[]nodes){// 空树或根节点为空if(nodesnull||nodes.length0||#.equals(nodes[0])){return0;}// 队列中存储当前节点的深度QueueIntegerqueuenewLinkedList();queue.offer(1);intindex1;intmaxDepth1;// 按层序数组模拟 BFSwhile(!queue.isEmpty()){intdepthqueue.poll();// 处理左子节点if(indexnodes.length){if(!#.equals(nodes[index])){queue.offer(depth1);maxDepthMath.max(maxDepth,depth1);}index;}// 处理右子节点if(indexnodes.length){if(!#.equals(nodes[index])){queue.offer(depth1);maxDepthMath.max(maxDepth,depth1);}index;}}returnmaxDepth;}/** * 解析输入字符串 * 格式: 1,#,2,#,3,#,4,#,5 */publicstaticString[]parseInput(Stringline){lineline.trim();if(line.isEmpty()){returnnewString[0];}returnline.split(,);}publicstaticvoidmain(String[]args){ScannerscannernewScanner(System.in);Stringlinescanner.nextLine().trim();String[]nodesparseInput(line);intresultmaxDepth(nodes);System.out.println(result);scanner.close();}}PythonfromcollectionsimportdequefromtypingimportListdefmax_depth(nodes:List[str])-int: 计算二叉树的最大深度 算法思路层序遍历 (BFS) - 使用队列存储当前节点的深度 - 按层序遍历数组模拟二叉树 - 记录最大深度 时间复杂度: O(n) 空间复杂度: O(n) # 空树或根节点为空ifnotnodesornodes[0]#:return0# 队列中存储当前节点的深度queuedeque([1])index1max_depth_val1# 按层序数组模拟 BFSwhilequeue:depthqueue.popleft()# 处理左子节点ifindexlen(nodes):ifnodes[index]!#:queue.append(depth1)max_depth_valmax(max_depth_val,depth1)index1# 处理右子节点ifindexlen(nodes):ifnodes[index]!#:queue.append(depth1)max_depth_valmax(max_depth_val,depth1)index1returnmax_depth_valdefparse_input(line:str)-List[str]:解析输入: 1,#,2,#,3,#,4,#,5lineline.strip()ifnotline:return[]return[x.strip()forxinline.split(,)]defmain():主函数lineinput().strip()nodesparse_input(line)resultmax_depth(nodes)print(result)if__name____main__:main()JavaScript/** * 计算二叉树的最大深度 * * param {string[]} nodes - 二叉树层序遍历数组 * returns {number} 最大深度 */functionmaxDepth(nodes){// 空树或根节点为空if(!nodes||nodes.length0||nodes[0]#){return0;}// 队列中存储当前节点的深度constqueue[];queue.push(1);letindex1;letmaxDepthVal1;// 按层序数组模拟 BFSwhile(queue.length0){constdepthqueue.shift();// 处理左子节点if(indexnodes.length){if(nodes[index]!#){queue.push(depth1);maxDepthValMath.max(maxDepthVal,depth1);}index;}// 处理右子节点if(indexnodes.length){if(nodes[index]!#){queue.push(depth1);maxDepthValMath.max(maxDepthVal,depth1);}index;}}returnmaxDepthVal;}/** * 解析输入字符串 * 格式: 1,#,2,#,3,#,4,#,5 */functionparseInput(line){lineline.trim();if(!line){return[];}returnline.split(,).map(xx.trim());}// 主函数 - 程序入口constreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});rl.on(line,(line){constnodesparseInput(line);constresultmaxDepth(nodes);console.log(result);rl.close();});C#includeiostream#includevector#includestring#includequeue#includesstream#includealgorithmusingnamespacestd;stringtrim(conststrings){intleft0;intright(int)s.size()-1;while(leftrights[left] ){left;}while(rightlefts[right] ){right--;}returns.substr(left,right-left1);}vectorstringsplit(conststringdata){vectorstringnodes;string item;stringstreamss(data);while(getline(ss,item,,)){nodes.push_back(trim(item));}returnnodes;}intmaxDepth(constvectorstringnodes){if(nodes.empty()||nodes[0]#){return0;}queueintq;q.push(1);intindex1;intans1;while(!q.empty()){intdepthq.front();q.pop();if(index(int)nodes.size()){if(nodes[index]!#){q.push(depth1);ansmax(ans,depth1);}index;}if(index(int)nodes.size()){if(nodes[index]!#){q.push(depth1);ansmax(ans,depth1);}index;}}returnans;}intmain(){string data;getline(cin,data);if(data.empty()){cout0endl;return0;}vectorstringnodessplit(data);coutmaxDepth(nodes)endl;return0;}Gopackagemainimport(bufiofmtosstrings)/** * 计算二叉树的最大深度 */funcmaxDepth(nodes[]string)int{// 空树或根节点为空iflen(nodes)0||nodes[0]#{return0}// 使用队列存储索引和深度typeNodeDepthstruct{idxintdepthint}queue:make([]NodeDepth,0)queueappend(queue,NodeDepth{0,1})maxDepthVal:1forlen(queue)0{node:queue[0]queuequeue[1:]ifnode.depthmaxDepthVal{maxDepthValnode.depth}// 左子节点索引leftIdx:2*node.idx1ifleftIdxlen(nodes)nodes[leftIdx]!#{queueappend(queue,NodeDepth{leftIdx,node.depth1})}// 右子节点索引rightIdx:2*node.idx2ifrightIdxlen(nodes)nodes[rightIdx]!#{queueappend(queue,NodeDepth{rightIdx,node.depth1})}}returnmaxDepthVal}/** * 解析输入字符串 */funcparseInput(linestring)[]string{linestrings.TrimSpace(line)ifline{return[]string{}}parts:strings.Split(line,,)result:make([]string,len(parts))fori,p:rangeparts{result[i]strings.TrimSpace(p)}returnresult}funcmain(){scanner:bufio.NewScanner(os.Stdin)scanner.Scan()line:scanner.Text()nodes:parseInput(line)result:maxDepth(nodes)fmt.Println(result)}C语言#includestdio.h#includestring.h#includestdlib.h#includectype.h#defineMAX_N1024#defineMAX_LEN10000voidtrim(char*s){intleft0;intrightstrlen(s)-1;while(leftrightisspace((unsignedchar)s[left])){left;}while(rightleftisspace((unsignedchar)s[right])){right--;}intindex0;for(intileft;iright;i){s[index]s[i];}s[index]\0;}intmaxDepth(charnodes[][32],intn){if(n0||strcmp(nodes[0],#)0){return0;}intqueue[MAX_N];intfront0;intrear0;queue[rear]1;intindex1;intans1;while(frontrear){intdepthqueue[front];if(indexn){if(strcmp(nodes[index],#)!0){queue[rear]depth1;if(depth1ans){ansdepth1;}}index;}if(indexn){if(strcmp(nodes[index],#)!0){queue[rear]depth1;if(depth1ans){ansdepth1;}}index;}}returnans;}intmain(){chardata[MAX_LEN];if(fgets(data,sizeof(data),stdin)NULL){printf(0\n);return0;}data[strcspn(data,\n)]\0;if(strlen(data)0){printf(0\n);return0;}charnodes[MAX_N][32];intn0;char*tokenstrtok(data,,);while(token!NULLnMAX_N){trim(token);strcpy(nodes[n],token);tokenstrtok(NULL,,);}printf(%d\n,maxDepth(nodes,n));return0;}完整用例用例1输入1,#,2,#,3,#,4,#,5用例2输入1,2,3,4,5,6,7,8,9用例3输入1,2,#用例4输入#用例5输入1,#,#用例6输入1,2,3,#,#,4,5用例7输入1,2,#,3,#,4用例8输入1,2,3,4,#,#,5用例9输入1,#,2,3,#,#用例10输入1,2,3,4,5,6,#,#,7文章目录**企业内部部门的最大层级**题目描述输入描述输出描述示例1示例2示例3解题思路算法步骤复杂度分析JavaPythonJavaScriptCGoC语言完整用例用例1用例2用例3用例4用例5用例6用例7用例8用例9用例10