招聘4000多人,字节跳动2025校园招聘已经开始了。。

e55675b78c442d6064ed7adabd21e494.gif

精品推荐

《征服数据结构》专栏:50多种数据结构彻底征服。

《经典图论算法》专栏:50多种经典图论算法全部掌握。

据字节跳动消息,8月6日字节跳动2025校园招聘正式启动,面向的是2025届应届毕业生(在2024年9月至2025年8月期间毕业)。

招聘岗位4000多个,涵盖研发,运营,产品,销售,设计等多种职类,其中研发类需求岗位较去年增长60%,即日起至11月30日可以在20多个城市投递。

df5dba817fa2d95140aa9b38b265af50.png

686c1942bc8c6b65e00a63c7026e0be0.png

5f676add851c80400fa8d37622445c66.png

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第257题:二叉树的所有路径。

问题描述

来源:LeetCode第257题

难度:简单

给你一个二叉树的根节点 root ,按任意顺序,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。

示例1:

c669ad44fcdb2c60853b3f3e50deecf1.jpeg

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

输出:["1->2->5","1->3"]

示例2:

输入:root = [1]

输出:["1"]

  • 树中节点的数目在范围 [1, 100] 内

  • -100 <= Node.val <= 100

问题分析

这题让返回二叉树的所有路径,可以从根节点开执行DFS,参考二叉树的前序遍历,把访问路径上的节点记录下来,到叶子节点的时候把路径保存下来即可。

JAVA:

public List<String> binaryTreePaths(TreeNode root) {
    List<String> ans = new ArrayList<>();
    dfs(root, "", ans);
    return ans;
}

private void dfs(TreeNode root, String path, List<String> ans) {
    if (root == null)
        return;
    // 如果是叶子节点,说明找到了一条路径,把它加入到res中
    if (root.left == null && root.right == null) {
        ans.add(path + root.val);
        return;
    }
    // 如果不是叶子节点,在分别遍历它的左右子节点
    dfs(root.left, path + root.val + "->", ans);
    dfs(root.right, path + root.val + "->", ans);
}

C++:

public:
    vector<string> binaryTreePaths(TreeNode *root) {
        vector<string> ans;
        dfs(root, "", ans);
        return ans;
    }

    void dfs(TreeNode *root, string path, vector<string> &ans) {
        if (root == nullptr)
            return;
        // 如果是叶子节点,说明找到了一条路径,把它加入到res中
        if (root->left == nullptr && root->right == nullptr) {
            ans.push_back(path + to_string(root->val));
            return;
        }
        // 如果不是叶子节点,在分别遍历他的左右子节点
        dfs(root->left, path + to_string(root->val) + "->", ans);
        dfs(root->right, path + to_string(root->val) + "->", ans);
    }

Python:

def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
    def dfs(tree, path):
        if not tree:
            return
        # 如果是叶子节点,说明找到了一条路径,把它加入到res中
        if not tree.left and not tree.right:
            ans.append(path + str(tree.val))
            return
        # 如果不是叶子节点,在分别遍历他的左右子节点
        dfs(tree.left, path + str(tree.val) + '->')
        dfs(tree.right, path + str(tree.val) + '->')

    ans = []
    dfs(root, '')
    return ans

1e217c1b7520021dac8552f1fcedac2b.gif

笔者简介

博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据结构和算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值