一、题目概述
二、思路方向
在Java中,中序遍历二叉树通常使用递归或迭代(使用栈)的方法来实现。这里我将提供两种方法的示例代码。
方法一:递归
递归方法相对直观,中序遍历的顺序是:先遍历左子树,然后访问根节点,最后遍历右子树。
javaclass TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); inorderHelper(root, result); return result; } private void inorderHelper(TreeNode node, List<Integer> result) { if (node == null) { return; } inorderHelper(node.left, result); result.add(node.val); inorderHelper(node.right, result); } }
方法二:迭代(使用栈)
迭代方法需要手动维护一个栈来模拟递归过程。
javaimport java.util.*; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); TreeNode curr = root; while (curr != null || !stack.isEmpty()) { // 遍历到最左节点 while (curr != null) { stack.push(curr); curr = curr.left; } // 弹出栈顶元素并访问 curr = stack.pop(); result.add(curr.val); // 转向右子树 curr = curr.right; } return result; } }
执行结果:
三、小结
两种方法各有优缺点。递归方法代码简洁,但在树非常深时可能会遇到栈溢出的问题。迭代方法虽然代码稍长,但避免了递归可能带来的栈溢出问题,且在某些情况下可能更高效(如树非常不平衡时)。你可以根据具体的应用场景和需求选择适合的方法。
结语
你做得已经很好了
别对自己太苛刻
!!!