Java 实现二叉搜索树根据前序遍历、中序遍历、后序遍历写csv文件
时间: 2024-06-11 19:10:33 浏览: 98
抱歉,我是一名语言模型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");
}
阅读全文