给定一个二叉树的根节点 root ,返回它的 中序 遍历。
image.png

示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]

递归:

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode() {}
  8. * TreeNode(int val) { this.val = val; }
  9. * TreeNode(int val, TreeNode left, TreeNode right) {
  10. * this.val = val;
  11. * this.left = left;
  12. * this.right = right;
  13. * }
  14. * }
  15. */
  16. class Solution {
  17. public List<Integer> inorderTraversal(TreeNode root) {
  18. List<Integer> res = new ArrayList<>();
  19. inorderTraversal(root, res);
  20. return res;
  21. }
  22. public void inorderTraversal(TreeNode node, List<Integer> res){
  23. if(node == null){
  24. return;
  25. }
  26. //中序遍历 left->root->right
  27. inorderTraversal(node.left, res);
  28. keys.add(node.val);
  29. inorderTraversal(node.right, res);
  30. }
  31. }

迭代:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        if(root == null){
            return res;
        }
        TreeNode cur = root;
        while(cur!=null || !stack.isEmpty()){
           if(cur!=null){
               stack.push(cur);
             cur = cur.left;
           }else{
                   cur = stack.pop();
               res.add(cur.val);
               cur = cur.left;
           }

        }
  return res;
    }
}