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

二叉树的递归遍历

前序遍历

java 复制代码
    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;
    }

中序遍历

java 复制代码
    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;
    }

后序遍历

java 复制代码
    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;
    }

层序遍历

java 复制代码
    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);
        }
    }

最大深度

java 复制代码
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }

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

最大直径

java 复制代码
    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
    }
相关推荐
桦说编程24 分钟前
交替打印最容易理解的实现——同步队列
java·后端·设计模式
土族程序员1 小时前
JavaFX CSS @font-face 错误全面分析 loadStylesheetUnPrivileged / reportException
java·css·javafx
猿小蔡-Cool1 小时前
Android Studio Memory Monitor内存分析核心指标详解
android·java·jvm
刘火锅1 小时前
解决IDEA拉取GitLab项目报错:必须为访问令牌授予作用域[api, read user]
java·gitlab·intellij-idea
巴厘猫2 小时前
Java开发者新机遇:LangChain4j——在Java中构建LLM应用的利器
java·后端·langchain
Your易元2 小时前
设计模式-访问者模式
java·开发语言
巴厘猫2 小时前
拥抱智能时代:Spring AI:在Spring生态中构建AI应用——深度剖析与实践
java·spring
loop lee2 小时前
【Spring】一文了解SpringMVC的核心功能及工作流程,以及核心组件及注解
java·后端·spring
Resean02232 小时前
SpringMVC 6+源码分析(一)初始化流程
java·后端·spring·servlet·springmvc
MacroZheng2 小时前
扔掉HttpUtil!看看人家的HTTP客户端工具,那叫一个优雅!
java·spring boot·后端