当前位置:网站首页>解析树字符串并输出中序遍历
解析树字符串并输出中序遍历
2022-08-10 05:36:00 【yeah_you_are】
题目描述
输入二叉树字符串,如“a{b{d{g,},e{,f}},c{,h{i,j{k,l}}}}”,节点都是以小写字母表示,请按照中序遍历的顺序输出。
思考
根据题目描述,可以将解决问题的过程分为两个步骤,首先解析字符串转存为树,然后就是实现中序遍历。
那么首先开始解析字符串。
public String[] parseToTree(String str) {
/** * 思路:这里以数组存储树结构,左子节点为2*i+1,右子节点为2*i+2,这里不做详细解析; * 这里重要的是注意三个字符“{”,“,”和“}”,当看见左花括号,那么下一个字母必为上一个 * 字母的左子节点,而看见逗号,那么下一个字母必是右子节点,而遍历到右花括号时,应当 * 将下标回退到父节点。 */
String[] tree = new String[60];
int index = 0;
for (int i=0;i<str.length();i++) {
String c = str.substring(i, i + 1);
if (c.matches("[a-z]"))
//字母写入数组
tree[index] = c;
else if (c.equals("{"))
//左子节点,下标指向左子节点位置
index = 2*index+1;
else if (c.equals(","))
//右子节点,下标指向右子节点位置
index ++;
else if (c.equals("}"))
//回退,退到父节点的位置
index = index/2-1;
}
return tree;
}
解析字符串解决了,接下来解决中序遍历的问题。
//首先使用递归实现,这里就很容易理解了
public String inorderRecurrent(String[] tree,int i) {
String c = "";
if (i >= tree.size())
return c;
//获取值
c = tree[i];
//按照左中右的顺序
return inorderRecurrent(tree,2*i+1) + c + inorderRecurrent(tree,2*i+2);
}
这样就基本可以解决这个问题了,但是当字符串变长时,这里的数组长度就得重新定义,而且递归遍历是耗费存储空间的,所以这里先留两个坑。
边栏推荐
猜你喜欢
随机推荐
pytorch-06.逻辑斯蒂回归
氨氮吸附工艺
以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
Pytorch - 07. Multidimensional characteristics of input processing
Pytorch配置与实战--Tips
新建STM32F407ZG Keil5项目
机器学习——聚类——商场客户聚类
pytorch-08. Load dataset
LeetCode 94.二叉树的中序遍历(简单)
LeetCode refers to offer 10-I. Fibonacci sequence (simple)
STM32单片机手机APP蓝牙高亮RGB彩灯控制板任意颜色亮度调光
C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
STM32F407ZG TIM通用定时器
The way for programmers to make money from a sideline business and increase their monthly income by 20K
Explain the principle of MySql index in detail
STM32F407ZG GPIO输出相关实验
pytorch-06. Logistic regression
中间件-Rocktmq
基于MNIST数据集的简单FC复现
mysql使用常见问题和解决