JAVA二刷-Day14 | 144.二叉树的前序遍历, 145.二叉树的后序遍历, 94.二叉树的中序遍历
发布人:shili8
发布时间:2025-03-02 15:04
阅读次数:0
**JAVA二刷-Day14 | 二叉树的前序、后序、中序遍历**
在本篇文章中,我们将讨论如何实现二叉树的前序、后序和中序遍历。这些遍历是通过递归或迭代方式来访问二叉树中的每个节点。
###1. 前序遍历前序遍历是指先访问根节点,然后再访问左子树和右子树。
java// Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } class Solution { public ListpreorderTraversal(TreeNode root) { List res = new ArrayList<>(); if (root == null) return res; // 前序遍历的顺序是根节点 -> 左子树 -> 右子树 res.add(root.val); res.addAll(preorderTraversal(root.left)); res.addAll(preorderTraversal(root.right)); return res; } }
###2. 后序遍历后序遍历是指先访问左子树和右子树,然后再访问根节点。
javaclass Solution { public ListpostorderTraversal(TreeNode root) { List res = new ArrayList<>(); if (root == null) return res; // 后序遍历的顺序是左子树 -> 右子树 -> 根节点 res.addAll(postorderTraversal(root.left)); res.addAll(postorderTraversal(root.right)); res.add(root.val); return res; } }
###3. 中序遍历中序遍历是指先访问左子树,然后再访问根节点和右子树。
javaclass Solution { public ListinorderTraversal(TreeNode root) { List res = new ArrayList<>(); if (root == null) return res; // 中序遍历的顺序是左子树 -> 根节点 -> 右子树 res.addAll(inorderTraversal(root.left)); res.add(root.val); res.addAll(inorderTraversal(root.right)); return res; } }
### 总结在本篇文章中,我们讨论了二叉树的前序、后序和中序遍历。这些遍历是通过递归或迭代方式来访问二叉树中的每个节点。我们提供了示例代码和注释,帮助读者理解这些遍历的实现细节。
###代码注释* `preorderTraversal`方法:实现前序遍历。
* `postorderTraversal`方法:实现后序遍历。
* `inorderTraversal`方法:实现中序遍历。
* `TreeNode`类:定义二叉树节点结构。
### 示例代码
javapublic class Main { 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("前序遍历:"); Listpreorder = preorderTraversal(root); for (int i : preorder) { System.out.print(i + " "); } System.out.println(); // 后序遍历 System.out.println("后序遍历:"); List postorder = postorderTraversal(root); for (int i : postorder) { System.out.print(i + " "); } System.out.println(); // 中序遍历 System.out.println("中序遍历:"); List inorder = inorderTraversal(root); for (int i : inorder) { System.out.print(i + " "); } } public static List preorderTraversal(TreeNode root) { // ... } public static List postorderTraversal(TreeNode root) { // ... } public static List inorderTraversal(TreeNode root) { // ... } }
### 最终结果前序遍历:12453后序遍历:45231中序遍历:42513