给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

法一:迭代

94. 二叉树的中序遍历(迭代、递归)2 - 图194. 二叉树的中序遍历(迭代、递归)2 - 图2
94. 二叉树的中序遍历(迭代、递归)2 - 图394. 二叉树的中序遍历(迭代、递归)2 - 图4
94. 二叉树的中序遍历(迭代、递归)2 - 图594. 二叉树的中序遍历(迭代、递归)2 - 图6

  1. class Solution {
  2. public List<Integer> inorderTraversal(TreeNode root) {
  3. List<Integer> res = new ArrayList<Integer>();
  4. Stack<TreeNode> stack = new Stack<TreeNode>();
  5. while(root!=null || !stack.empty()){
  6. while(root!=null){
  7. stack.push(root);
  8. root = root.left;
  9. }
  10. root = stack.pop();
  11. res.add(root.val);
  12. root = root.right;
  13. }
  14. return res;
  15. }
  16. }

94. 二叉树的中序遍历(迭代、递归)2 - 图7

法二:递归

  1. class Solution {
  2. public List < Integer > inorderTraversal(TreeNode root) {
  3. List < Integer > res = new ArrayList < > ();
  4. helper(root, res);
  5. return res;
  6. }
  7. public void helper(TreeNode root, List < Integer > res) {
  8. if (root == null) {
  9. return;
  10. }
  11. helper(root.left, res);
  12. res.add(root.val);
  13. helper(root.right, res);
  14. }
  15. }

94. 二叉树的中序遍历(迭代、递归)2 - 图8