
题目描述
94. 二叉树的中序遍历
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
解题思路
中序遍历即以左子树->根节点->右子树的访问方式遍历二叉树,可使用递归和迭代两种方式实现。
代码实现
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class Solution94Case1 { public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); inOrder(root, result); return result; }
private static void inOrder(TreeNode root, List<Integer> list) { if (null == root) { return; } inOrder(root.left, list); list.add(root.val); inOrder(root.right, list); }
public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); TreeNode node5 = new TreeNode(5); node1.left = node2; node1.right = node5; node2.left = node3; node2.right = node4; List<Integer> integers = inorderTraversal(node1); System.err.println(integers); } }
|
迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class Solution94Case2 { public static List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); while(stack.size()>0 || root!=null) { if(root!=null) { stack.add(root); root = root.left; } else { TreeNode tmp = stack.pop(); result.add(tmp.val); root = tmp.right; } } return result; }
public static void main(String[] args) { TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); TreeNode node4 = new TreeNode(4); TreeNode node5 = new TreeNode(5); node1.left = node2; node1.right = node5; node2.left = node3; node2.right = node4; List<Integer> integers = inorderTraversal(node1); System.err.println(integers); } }
|