题目描述
题目链接:94. 二叉树的中序遍历 - 力扣(LeetCode) (leetcode-cn.com)
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树。
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); inorder(root, res); return res; } public void inorder(TreeNode root, List<Integer> list){ if(null != root){ inorder(root.left, list); list.add(root.val); inorder(root.right, list); } } }
|
迭代
- 先遍历到当前结点,但不求值,入栈
- 接着遍历左结点,入栈,往下遍历
- 当前结点没有左结点了,则出栈,求值
- 当前结点有右结点,重复步骤1
- 遍历直到栈为空为止
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); TreeNode cur = root; while(null != cur || !stack.isEmpty()){ while(null != cur){ stack.push(cur); cur = cur.left; } cur = stack.pop(); res.add(cur.val); cur = cur.right; } return res; } }
|