二叉树的中序遍历
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:

1 2
| 输入:root = [1,null,2,3] 输出:[1,3,2]
|
示例 2:
示例 3:
提示:
- 树中节点数目在范围
[0, 100]
内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
递归写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); mid(root, list); return list; }
private void mid(TreeNode root, List list) { if (root != null) { mid(root.left, list); list.add(root.val); mid(root.right, list); } } }
|
迭代写法
如果栈不空并且root
不为null
一直循环:
- 如果
root
不为空,将root
入栈,root
指向左孩子
- 如果
root
为空,栈顶出栈,栈顶右孩子入栈
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); Deque<TreeNode> stack = new LinkedList<>(); while (root != null || !stack.isEmpty()) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); list.add(root.val); root = root.right; } return list; } }
|