一、树(一)

本文仅用于记录个人学习算法的一个过程,欢迎指教。

树做为培养算法框架思想的基础,我觉得很有必要从树的算法开始学习。

下面,请跟着我在leetCode一起把树研究吃透,请务必跟我一起练习coding,你可以先去leetCode上去自己试着写代码,一定不要先看答案,需要自己有一个思想的过程,如果没有这个过程,根本做不到彻底把握。

首先,你得要了解,在树结构中的基本框架无非就是三种遍历

void traverse(TreeNode root){
    // 前序遍历 todo
    traverse(root.left);
    // 中序遍历 todo
    traverse(root.right);
    // 后序遍历 todo
}

1、前序遍历:先遍历根节点,再遍历左节点,最后遍历右节点;FBADCEGIH
2、中序遍历:先遍历左节点,再遍历根节点,最后遍历右节点;ABCDEFGHI

        这里中序遍历可以有个小办法,你想象把这个树压平,得出来的顺序即中序遍历的顺序。
3、后序遍历:先遍历左节点,再遍历右节点,最后遍历根节点;ACEDBHIGF

在这里插入图片描述

例: LeetCode #94:

树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例 1:

输入:root = [1,null,2,3]
输出:[1,3,2]

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

    void traversal(List<Integer> result, TreeNode root){
        if(root == null){return;}

        traversal(result, root.left);
        result.add(root.val);
        traversal(result, root.right);

    }
}

例: LeetCode #104:

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

class Solution {
    public int maxDepth(TreeNode root) {
        // 根节点判断
        if(root == null){
            return 0;
        }
        // 左侧子节点深度
        int leftDepth = maxDepth(root.left);

        // 右侧子节点深度
        int rightDepth = maxDepth(root.right);

        // 计算当前最大深度
        return Math.max(leftDepth, rightDepth) + 1;
    }
}

例: LeetCode #104:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值