leetcode算法练习【94】 二叉树的中序遍历

文章目录

        • 所有题目源代码:[Git地址](https://github.com/ch98road/leetcode)
        • 题目
        • 方案:递归、迭代+栈
          • 复杂度计算
        • 杂记

所有题目源代码:Git地址

题目

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

方案:递归、迭代+栈

  • 迭代的话就用栈来实现,原理逻辑都差不多的
class Solution {
        private List<Integer> res = new LinkedList<>();
        private Stack<TreeNode> stack = new Stack<>();

        public List<Integer> inorderTraversal(TreeNode root) {
            //  递归解法
            // if (root==null) return res;
            // if(root.left!=null) inorderTraversal(root.left);
            // res.add(root.val);
            // if(root.right!=null) inorderTraversal(root.right);
            // 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.right;
                }
            }
            return res;
        }
    }
}
复杂度计算
  • 时间复杂度:O(n)
  • 空间复杂度:O(n),递归所需空间复杂度是迭代此时*每次需要保存的数据大小

杂记

  • 理论上来说递归的效率会低于迭代,但是我的版本刚好相反哈哈,这可能是个假栈。

你可能感兴趣的:(#,算法练习Java版)