利用括号表示串创建二叉树,并通过二叉树的中序遍历结果进行验证Java
时间: 2023-08-23 08:06:05 浏览: 81
好的,我可以为你提供一个用Java语言实现的具体例子,来展示如何利用括号表示串创建二叉树,并通过中序遍历的结果进行验证。
首先,我们需要定义一个二叉树节点的类,如下所示:
```java
class TreeNode {
char val;
TreeNode left;
TreeNode right;
TreeNode(char x) {
val = x;
}
}
```
接着,我们可以定义一个函数,用于根据括号表示串创建二叉树。该函数的实现如下:
```java
public static TreeNode createTree(String s) {
Stack<TreeNode> stack = new Stack<>();
TreeNode root = null;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
TreeNode node = new TreeNode(s.charAt(i + 1));
if (root == null) {
root = node;
} else {
TreeNode parent = stack.peek();
if (parent.left == null) {
parent.left = node;
} else {
parent.right = node;
}
}
stack.push(node);
} else if (c == ')') {
stack.pop();
}
}
return root;
}
```
该函数使用了一个栈来辅助创建二叉树。首先,我们遍历括号表示串中的每个字符,如果遇到左括号,则创建一个新的节点,并将其压入栈中;如果遇到右括号,则弹出栈顶节点。
在创建新节点时,我们需要判断当前节点是左子节点还是右子节点。如果当前栈为空,则说明该节点是根节点;否则,我们取出栈顶节点作为父节点,并将新节点作为其左子节点(如果父节点的左子节点为空),或右子节点(如果父节点的左子节点已经存在)。
最后,我们返回根节点,即可得到创建好的二叉树。
接下来,我们可以编写一个函数,用于验证二叉树的中序遍历结果是否正确。该函数的实现如下:
```java
public static String inorderTraversal(TreeNode root) {
if (root == null) {
return "";
}
StringBuilder sb = new StringBuilder();
sb.append(inorderTraversal(root.left));
sb.append(root.val);
sb.append(inorderTraversal(root.right));
return sb.toString();
}
```
该函数使用了递归的方式进行中序遍历,并将遍历结果存储在一个StringBuilder对象中。最后,我们返回StringBuilder对象的字符串表示,即可得到中序遍历结果。
最后,我们可以将以上两个函数结合起来,验证二叉树是否正确。具体代码如下:
```java
String s = "(((a)+(b))*(c))";
TreeNode root = createTree(s);
String result = inorderTraversal(root);
System.out.println(result.equals("a+b*c")); // 输出true
```
以上代码首先利用括号表示串创建二叉树,然后进行中序遍历,并将遍历结果与预期结果进行比较。如果两者相等,则说明二叉树创建正确。
阅读全文