Java实现前序遍历、中序遍历和后序遍历。
时间: 2023-12-10 08:33:03 浏览: 112
二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。Java实现这三种遍历方式的代码如下:
前序遍历:
```java
public void preOrder(TreeNode root) {
if (root != null) {
System.out.print(root.val + " ");
preOrder(root.left);
preOrder(root.right);
}
}
```
中序遍历:
```java
public void inOrder(TreeNode root) {
if (root != null) {
inOrder(root.left);
System.out.print(root.val + " ");
inOrder(root.right);
}
}
```
后序遍历:
```java
public void postOrder(TreeNode root) {
if (root != null) {
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val + " ");
}
}
```
其中,TreeNode是二叉树的节点类,val表示节点的值,left和right分别表示左子树和右子树。
相关问题
Java 实现二叉搜索树根据前序遍历、中序遍历、后序遍历写csv文件
抱歉,我是一名语言模型AI,无法为您提供实际编程操作,但可以为您提供伪代码:
1. 定义二叉搜索树节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
2. 实现二叉搜索树的构建方法
public TreeNode buildTree(int[] preorder, int[] inorder, int preStart, int preEnd, int inStart, int inEnd) {
if (preStart > preEnd) {
return null;
}
TreeNode root = new TreeNode(preorder[preStart]);
int index = inStart;
while (index <= inEnd && inorder[index] != root.val) {
index++;
}
int leftSize = index - inStart;
root.left = buildTree(preorder, inorder, preStart + 1, preStart + leftSize, inStart, index - 1);
root.right = buildTree(preorder, inorder, preStart + leftSize + 1, preEnd, index + 1, inEnd);
return root;
}
3. 实现二叉搜索树的遍历方法
// 前序遍历
public void preorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
list.add(root.val);
preorder(root.left, list);
preorder(root.right, list);
}
// 中序遍历
public void inorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
inorder(root.left, list);
list.add(root.val);
inorder(root.right, list);
}
// 后序遍历
public void postorder(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
postorder(root.left, list);
postorder(root.right, list);
list.add(root.val);
}
4. 将遍历结果写入csv文件
public void writeCsvFile(List<Integer> list, String filename) {
try {
FileWriter writer = new FileWriter(filename);
for (int val : list) {
writer.append(Integer.toString(val));
writer.append(',');
}
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
5. 主函数中调用上述方法
public static void main(String[] args) {
int[] preorder = {3, 9, 20, 15, 7};
int[] inorder = {9, 3, 15, 20, 7};
int[] postorder = {9, 15, 7, 20, 3};
Solution solution = new Solution();
TreeNode root = solution.buildTree(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
List<Integer> preorderList = new ArrayList<>();
solution.preorder(root, preorderList);
solution.writeCsvFile(preorderList, "preorder.csv");
List<Integer> inorderList = new ArrayList<>();
solution.inorder(root, inorderList);
solution.writeCsvFile(inorderList, "inorder.csv");
List<Integer> postorderList = new ArrayList<>();
solution.postorder(root, postorderList);
solution.writeCsvFile(postorderList, "postorder.csv");
}
用Java代码实现创建一个二叉树,利用前序遍历、中序遍历和后序遍历方法对二叉树进行遍历并测试及分析需求,及运行结果
在Java中,我们可以先创建一个二叉树节点类(Node),然后构建二叉树结构。这里是一个简单的二叉树节点类和三个遍历方法的示例:
```java
// 定义二叉树节点
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
left = null;
right = null;
}
}
// 前序遍历 (根 -> 左 -> 右)
void preOrder(TreeNode node) {
if (node != null) {
System.out.print(node.val + " ");
preOrder(node.left);
preOrder(node.right);
}
}
// 中序遍历 (左 -> 根 -> 右)
void inOrder(TreeNode node) {
if (node != null) {
inOrder(node.left);
System.out.print(node.val + " ");
inOrder(node.right);
}
}
// 后序遍历 (左 -> 右 -> 根)
void postOrder(TreeNode node) {
if (node != null) {
postOrder(node.left);
postOrder(node.right);
System.out.print(node.val + " ");
}
}
```
为了测试这个二叉树,你需要创建一个包含节点的实例,并分别调用这三个遍历方法。例如:
```java
public static void main(String[] args) {
// 创建一个简单的二叉树
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
System.out.println("前序遍历:");
preOrder(root); // 输出: 1 2 4 5 3
System.out.println("\n中序遍历:");
inOrder(root); // 输出: 4 2 5 1 3
System.out.println("\n后序遍历:");
postOrder(root); // 输出: 4 5 2 3 1
}
```
在这个例子中,我们创建了一个高度为2的二叉树,通过打印每个节点值,你可以看到三种遍历方式下的不同输出顺序。
阅读全文
相关推荐











