LeetCode 94 二叉树中序遍历

LeetCode 94 二叉树中序遍历

题目描述:给定一个二叉树,返回它的中序遍历。

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.2 MB, 在所有 Java 提交中击败了14.07%的用户

递归

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        dfs(root, result);
        return result;
    }

    public void dfs(TreeNode root, List<Integer> inorderTraversal) {
        if(root==null) {
            return;
        }
        else{
            //左、根、右
            dfs(root.left, inorderTraversal);
            inorderTraversal.add(root.val);
            dfs(root.right, inorderTraversal);
        }
        return;
    }
}

非递归: 使用栈

  1. 对于某个非空根节点,将其入栈
  2. 若根节点左子节点不为空,重复1步骤;否则进入3步骤
  3. 因为左子节点为空(无左子树/访问完毕),因此将栈顶根节点弹出并访问
  4. 若根节点有子节点不为空,重复1步骤;否则重复3步骤

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38 MB, 在所有 Java 提交中击败了44.37%的用户

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        //使用栈进行非递归形式遍历
        List<TreeNode> stack = new ArrayList<TreeNode>();
        TreeNode node = root;
        while(!stack.isEmpty() || node!=null){
            if(node!=null) {
                stack.add(node);
                node = node.left;
            }
            else if(node==null) {
                node = stack.get(stack.size()-1);
                result.add(node.val);
                stack.remove(stack.size()-1);
                node = node.right;
            }
        }
        return result;
    }
}
posted @ 2020-08-19 14:07  CodeSPA  阅读(84)  评论(0编辑  收藏  举报