zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    
  • 相关阅读:
    【项目】项目17
    【项目】项目16
    【项目】项目15
    【项目】项目14
    【项目】项目13
    【项目】项目12
    【项目】项目11
    【项目】项目10
    【项目】项目9
    【项目】项目8
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13529023.html
Copyright © 2011-2022 走看看