欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 2023华为od统一考试B卷【二叉树中序遍历】

2023华为od统一考试B卷【二叉树中序遍历】

2025/5/3 17:02:05 来源:https://blog.csdn.net/XYL147250/article/details/147672105  浏览:    关键词:2023华为od统一考试B卷【二叉树中序遍历】

前言

博主刷的华为机考题,代码仅供参考,因为没有后台数据,可能有没考虑到的情况

如果感觉对你有帮助,请点点关注点点赞吧,谢谢你!

题目描述

思路

0.用Character数组存储树,index下标的左右子树下标是index*2+1,index*2+2

1.用一个栈来保存父亲节点:在操作{}内部的数据时入栈(也就是碰到“{”时)

2.遇到 {, 的情况就是直接是index的左子树为空,右子树存在index=index*2+2

3.遇到 { 情况,(没有和 , 连接)index的左子树index=index*2+1

4.遇到 , 的情况:如果是左右两个子树都存在,index指向左子树,index++就ok

5. 遇到 } 出栈 index=出栈元素也就是父亲节点

6. 遇到节点字符(字母)写入Character数组

7.中序遍历(比较简单,递归实现)

8. 这道题难在处理字符串构建二叉树

代码

import java.util.Scanner;
import java.util.Stack;/*
a{b{d,e{g,h{,I}}},c{f}}*/
public class Main {public static void main(String[] args) {Scanner in=new Scanner(System.in);String str=in.nextLine();Character[] arr=new Character[202];int index=0;Stack<Integer>stack=new Stack<>();for (int i = 0; i < str.length();i++) {if(str.charAt(i)=='{'){stack.push(index);if(str.charAt(i+1)==','){index=index*2+2;}else{index=index*2+1;}}else if(str.charAt(i)==','){if(str.charAt(i+1)!='}'&&str.charAt(i-1)!='{'){index++;}}else if(str.charAt(i)=='}'){index=stack.peek();stack.pop();}else{arr[index]=str.charAt(i);}}ZX(arr,0);}private static void ZX(Character[] arr,int index){if(arr[index]==null)return;ZX(arr,index*2+1);System.out.print(arr[index]);ZX(arr,index*2+2);}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词