Java先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数
时间: 2023-12-08 09:36:41 浏览: 220
以下是Java先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数的代码实现:
```java
import java.util.Scanner;
public class Main {
static int leafCount = 0; // 叶子结点数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String preOrder = scanner.nextLine(); // 输入先序序列
Node root = buildTree(preOrder); // 创建二叉树
System.out.print("先序序列:");
preOrderTraversal(root); // 输出先序序列
System.out.println();
System.out.print("中序序列:");
inOrderTraversal(root); // 输出中序序列
System.out.println();
System.out.print("后序序列:");
postOrderTraversal(root); // 输出后序序列
System.out.println();
System.out.println("叶子结点数:" + leafCount); // 输出叶子结点数
}
// 创建二叉树
public static Node buildTree(String preOrder) {
if (preOrder == null || preOrder.length() == 0) {
return null;
}
char ch = preOrder.charAt(0);
if (ch == '#') { // 如果是#,表示该结点为空
return null;
}
Node root = new Node(ch); // 创建根结点
root.left = buildTree(preOrder.substring(1)); // 递归创建左子树
root.right = buildTree(preOrder.substring(1)); // 递归创建右子树
if (root.left == null && root.right == null) { // 如果是叶子结点
leafCount++;
}
return root;
}
// 先序遍历
public static void preOrderTraversal(Node root) {
if (root == null) {
return;
}
System.out.print(root.val + " ");
preOrderTraversal(root.left);
preOrderTraversal(root.right);
}
// 中序遍历
public static void inOrderTraversal(Node root) {
if (root == null) {
return;
}
inOrderTraversal(root.left);
System.out.print(root.val + " ");
inOrderTraversal(root.right);
}
// 后序遍历
public static void postOrderTraversal(Node root) {
if (root == null) {
return;
}
postOrderTraversal(root.left);
postOrderTraversal(root.right);
System.out.print(root.val + " ");
}
}
class Node {
char val;
Node left;
Node right;
public Node(char val) {
this.val = val;
}
}
```
阅读全文