java二叉树输入字符串
时间: 2024-03-10 09:42:08 浏览: 64
在Java中,可以通过字符串来表示二叉树的结构。一种常见的表示方法是使用括号表示法,也称为括号表达式。在括号表达式中,每个节点由一个值和两个子节点组成,用括号将它们包围起来。
例如,以下是一个二叉树的括号表达式:"(1(2(4))(3))"。在这个例子中,根节点的值是1,它有两个子节点,左子节点的值是2,右子节点的值是3,而左子节点又有一个子节点,值为4。
如果你想通过输入字符串来构建一个二叉树,可以按照以下步骤进行操作:
1. 创建一个栈,用于存储节点。
2. 遍历输入字符串的每个字符。
3. 如果当前字符是数字,则创建一个新节点,并将其压入栈中。
4. 如果当前字符是左括号'(',则继续遍历下一个字符。
5. 如果当前字符是右括号')',则弹出栈顶的两个节点,并将它们连接为父子关系,再将父节点压入栈中。
6. 重复步骤4和步骤5,直到遍历完整个字符串。
7. 最后,栈中只剩下一个节点,即为整个二叉树的根节点。
下面是一个示例代码,用于将输入字符串转换为二叉树的根节点:
```java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class BinaryTreeFromString {
public static TreeNode str2tree(String s) {
if (s == null || s.length() == 0) {
return null;
}
Stack<TreeNode> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c) || c == '-') {
int start = i;
while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1))) {
i++;
}
int num = Integer.parseInt(s.substring(start, i + 1));
TreeNode node = new TreeNode(num);
if (!stack.isEmpty()) {
TreeNode parent = stack.peek();
if (parent.left == null) {
parent.left = node;
} else {
parent.right = node;
}
}
stack.push(node);
} else if (c == ')') {
stack.pop();
}
}
return stack.isEmpty() ? null : stack.peek();
}
}
```
使用上述代码,你可以将输入的字符串转换为二叉树的根节点。例如,对于输入字符串"(1(2(4))(3))",可以通过调用`str2tree`方法来获取对应的二叉树的根节点。
阅读全文