• 算法训练 第六周


    二、二叉树的中序遍历

    在这里插入图片描述
    本题给我们了一个二叉树,要求我们以中序遍历的方式输出它的值。

    1.递归法

    使用递归的方式来模拟遍历二叉树的过程,按照左头右的顺序进行,递归终止条件为遇到空节点,具体代码如下:

    /**
     * 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> list = new ArrayList<>();
        public List<Integer> inorderTraversal(TreeNode root) {
            inorderRecur(root);
            return list;
        }
        public void inorderRecur(TreeNode root) {
            if(root == null) {
                return;
            }
            inorderRecur(root.left);
            list.add(root.val);
            inorderRecur(root.right);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    复杂度分析
    • 时间复杂度:O(n)。
    • 空间复杂度:O(n)。

    2.迭代法

    迭代法其实是递归法的另一种实现方式,我们通过维护一个栈来模拟实现递归的过程,具体代码如下:

    /**
     * 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> list = new ArrayList<>();
            Stack<TreeNode> sta = new Stack<>();
            TreeNode head = root;
            while(!sta.isEmpty() || head != null) {
                if(head != null) {
                    sta.push(head);
                    head = head.left;
                } else {
                    head = sta.pop();
                    list.add(head.val);
                    head = head.right;
                }
            }
            return list;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    复杂度分析
    • 时间复杂度:O(n)。
    • 空间复杂度:O(n)。
  • 相关阅读:
    Python 搭建编程环境
    谁来看看这个算法解答这个问题的解题过程!
    【分享】影刀使用xpath捕获指定的元素
    Riesz表示定理
    手把手带你学python—牛客网python基础 乘法与幂运算
    《HTML+CSS+JavaScript》之第19章 背景样式
    jstl标签传参数失败
    ts的文字类型
    Zookeeper 集群搭建
    13年过去了,Spring官方竟然真的支持Bean的异步初始化了!
  • 原文地址:https://blog.csdn.net/Gatcher/article/details/134286400