二叉树的递归遍历|前中后序遍历、最大深度、最大直径

二叉树的递归遍历

前序遍历

    public List<Integer> preorderTraversal(TreeNode root) {
   
        List<Integer> res = new ArrayList<>();

        if (root == null) {
   
            return res;
        }

        res.add(root.val);
        if (root.left != null) {
   
            res.addAll(preorderTraversal(root.left));
        }
        if (root.right != null) {
   
            res.addAll(preorderTraversal(root.right));
        }
        return res;
    }

中序遍历

    public List<Integer> inorderTraversal(TreeNode root) {
   
        List<Integer> res = new ArrayList<>();

        if (root == null) {
   
            return res;
        }

        if (root.left != null) {
   
            res.addAll(inorderTraversal(root.left));
        }
        res.add(root.val);
        if (root.right != null) {
   
            res.addAll(inorderTraversal(root.right));
        }
        return res;
    }

后序遍历

    public List<Integer> postorderTraversal(TreeNode root) {
   
        List<Integer> res = new ArrayList<>();

        if (root == null) {
   
            return res;
        }

        if (root.left != null) {
   
            res.addAll(postorderTraversal(root.left));
        }
        if (root.right != null) {
   
            res.addAll(postorderTraversal(root.right));
        }
        res.add(root.val);
        return res;
    }

层序遍历

    List<List<Integer>> res = new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
   
        if (root == null) {
   
            return res;
        }
        helper(root, 0);
        return res;
    }

    private void helper(TreeNode root, int level) {
   
        if (level == res.size()) {
   
            res.add(new ArrayList<>());
        }
        res.get(level).add(root.val);

        if (root.left != null) {
   
            helper(root.left, level+1);
        }
        if (root.right != null) {
   
            helper(root.right, level+1);
        }
    }

最大深度

    public int maxDepth(TreeNode root) {
   
        if (root == null) {
   
            return 0;
        }

        return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
    }

最大直径

    int maxd = 0;
    public int diameterOfBinaryTree(TreeNode root) {
   
        if (root == null) {
   
            return 0;
        }
        depth(root);
        return maxd;
    }

    private int depth(TreeNode root) {
   
        if (root == null) {
   
            return 0;
        }

        int left = depth(root.left);
        int right = depth(root.right);
        maxd = Math.max(left+right, maxd); //获得当前节点的直径为 左右子树深度和
        return Math.max(left, right) + 1; //当前节点的深度为左右子树深度的最大值+1
    }

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-26 21:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-26 21:02:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-26 21:02:04       82 阅读
  4. Python语言-面向对象

    2023-12-26 21:02:04       91 阅读

热门阅读

  1. 【Unity】对象池技术

    2023-12-26 21:02:04       60 阅读
  2. arm32 arm64 读取PMCCNTR cpu cycle counter

    2023-12-26 21:02:04       94 阅读
  3. 【Git使用小技巧】一个项目使用多个远程仓库

    2023-12-26 21:02:04       66 阅读
  4. .NET 7(C#)配置使用log4net日志框架的方法

    2023-12-26 21:02:04       47 阅读
  5. 前端面试题html

    2023-12-26 21:02:04       57 阅读
  6. Day01-BootStrap

    2023-12-26 21:02:04       48 阅读
  7. 【漏洞库】其他漏洞5

    2023-12-26 21:02:04       50 阅读
  8. StringBuilder和Stringjoiner

    2023-12-26 21:02:04       50 阅读