/** * 递归实现 * * @param root * @return */ public static List<Integer> midOrder(TreeNode root) { List<Integer> res = new ArrayList<>(); minOrder(root, res); return res; } public static void minOrder(TreeNode root, List<Integer> res) { if (root == null) { return; } minOrder(root.left, res); res.add(root.val); minOrder(root.right, res); } /** * 非递归实现 * * @param root * @return */ public static List<Integer> midOrder2(TreeNode root) { Stack<TreeNode> stack = new Stack<TreeNode>(); List<Integer> list = new ArrayList<>(); stack.add(root); while (!stack.isEmpty()) { TreeNode pop = stack.pop(); if (pop != null) { stack.add(pop); stack.add(pop.left); } else if (!stack.isEmpty()) { TreeNode pop1 = stack.pop(); list.add(pop1.val); stack.add(pop1.right); } } return list; } public static void main(String[] args) { TreeNode treeNode15 = new TreeNode(15, null, null); TreeNode treeNode7 = new TreeNode(7, null, null); TreeNode treeNode20 = new TreeNode(20, treeNode15, treeNode7); TreeNode treeNode9 = new TreeNode(9, null, null); TreeNode treeNode3 = new TreeNode(3, treeNode9, treeNode20); List<Integer> list = midOrder(treeNode3); list.stream().forEach(b -> { System.out.println(b); }); System.out.println("======="); List<Integer> list2 = midOrder2(treeNode3); list.stream().forEach(b -> { System.out.println(b); }); }
二叉树的中序遍历
于 2022-08-27 09:43:40 首次发布