java利用括号表示串创建二叉树,并通过二叉树的中序遍历结果进行验证,并用代码表示
可以利用括号表示法创建二叉树,其中左括号表示左子树的开始,右括号表示左子树的结束,中间的字符表示当前节点的值,例如:`(A(B(C)(D))(E(F)))` 表示如下的二叉树:
```
A
/ \
B E
/ /
C F
\
D
```
可以通过中序遍历验证二叉树的正确性,中序遍历的结果应该是按照节点值的大小顺序输出。
以下是Java代码实现:
```java
class TreeNode {
char val;
TreeNode left;
TreeNode right;
TreeNode(char x) { val = x; }
}
public class BinaryTree {
public static TreeNode createTree(String s) {
if (s == null || s.length() == 0) {
return null;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode root = null;
int i = 0;
while (i < s.length()) {
char c = s.charAt(i);
if (c == '(') {
stack.push(root);
root = null;
} else if (c == ')') {
root = stack.pop();
} else {
root = new TreeNode(c);
if (!stack.isEmpty()) {
TreeNode parent = stack.peek();
if (parent.left == null) {
parent.left = root;
} else {
parent.right = root;
}
}
}
i++;
}
return root;
}
public static void inorderTraversal(TreeNode root) {
if (root == null) {
return;
}
inorderTraversal(root.left);
System.out.print(root.val + " ");
inorderTraversal(root.right);
}
public static void main(String[] args) {
String s = "(A(B(C)(D))(E(F)))";
TreeNode root = createTree(s);
inorderTraversal(root); // 输出 C B D A F E
}
}
```
创作工场
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用🔥专业版,更聪明、更完整、更原创!