0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

二叉树按任意顺序,返回所有路径程序实现

西西 来源:续加仪 作者:续加仪 2022-09-20 11:35 次阅读

二叉树的所有路径

来源:力扣(LeetCode)链接:https://leetcode.cn/problems/binary-tree-paths

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

叶子节点是指没有子节点的节点。

示例 1:

30461646-382e-11ed-ba43-dac502259ad0.jpg

e.g.

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

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

示例 2:

输入:root = [1]

输出:["1"]

提示:

-100 <= Node.val <= 100

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

C语言求解

方法一:迭代

/**

* Definition for a binary tree node.

* struct TreeNode {

* int val;

* struct TreeNode *left;

* struct TreeNode *right;

* };

*/

void construct_paths(struct TreeNode* root, char** res, int* returnSize, int* sta, int top) {

if (root != NULL) {

if (root->left == NULL && root->right == NULL) { // 当前节点是叶子节点

char* tmp = (char*)malloc(1001);

int len = 0;

for (int i = 0; i < top; i++) {

len += sprintf(tmp + len, "%d->", sta[i]);

}

sprintf(tmp + len, "%d", root->val);

res[(*returnSize)++] = tmp; // 把路径加入到答案中

} else {

sta[top++] = root->val; // 当前节点不是叶子节点,继续递归遍历

construct_paths(root->left, res, returnSize, sta, top);

construct_paths(root->right, res, returnSize, sta, top);

}

}

}

char** binaryTreePaths(struct TreeNode* root, int* returnSize) {

char** paths = (char**)malloc(sizeof(char*) * 1001);

*returnSize = 0;

int sta[1001];

construct_paths(root, paths, returnSize, sta, 0);

return paths;

}

方法二:广度优先

/**

* Note: The returned array must be malloced, assume caller calls free().

*/

char **binaryTreePaths(struct TreeNode *root, int *returnSize) {

char **paths = (char **) malloc(sizeof(char *) * 1001);

*returnSize = 0;

if (root == NULL) {

return paths;

}

struct TreeNode **node_queue = (struct TreeNode **) malloc(sizeof(struct TreeNode *) * 1001);

char **path_queue = (char **) malloc(sizeof(char *) * 1001);

int left = 0, right = 0;

char *tmp = malloc(sizeof(char) * 1001);

sprintf(tmp, "%d", root->val);

node_queue[right] = root;

path_queue[right++] = tmp;

while (left < right) {

struct TreeNode *node = node_queue[left];

char *path = path_queue[left++];

if (node->left == NULL && node->right == NULL) {

paths[(*returnSize)++] = path;

} else {

if (node->left != NULL) {

tmp = malloc(sizeof(char) * 1001);

sprintf(tmp, "%s->%d", path, node->left->val);

node_queue[right] = node->left;

path_queue[right++] = tmp;

}

if (node->right != NULL) {

tmp = malloc(sizeof(char) * 1001);

sprintf(tmp, "%s->%d", path, node->right->val);

node_queue[right] = node->right;

path_queue[right++] = tmp;

}

}

}

return paths;

}

编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    12307

原文标题:257.二叉树的所有路径

文章出处:【微信号:续加仪,微信公众号:续加仪】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    计算机二叉树的问题

    各位大神,本人马上要考计算机级了,那个二叉树老是弄不明白,比如一个题目,一棵二叉树共有25个节点,其中五个叶子节点,则度为1的节点数为?
    发表于 09-04 09:45

    基于二叉树的时序电路测试序列设计

    为了实现时序电路状态验证和故障检测,需要事先设计一个输入测试序列。基于二叉树节点和树枝的特性,建立时序电路状态二叉树,按照电路二叉树节点(状态)与树枝(输入)的层次逻辑
    发表于 07-12 13:57 0次下载
    基于<b class='flag-5'>二叉树</b>的时序电路测试序列设计

    二叉树层次遍历算法的验证

    实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。
    发表于 11-28 01:05 2074次阅读
    <b class='flag-5'>二叉树</b>层次遍历算法的验证

    二叉树,一种基础的数据结构类型

    然后我们再定义一棵深度也为 3 的二叉树,该二叉树的 n 个结点(n≤7),当从 1 到 n 的每个结点都与上图中的编号结点一一对应时,这二叉树就称为完全二叉树
    的头像 发表于 04-13 10:48 4287次阅读
    <b class='flag-5'>二叉树</b>,一种基础的数据结构类型

    详解电源二叉树到底是什么

    作为数据结构的基础,分很多种,像 AVL 、红黑二叉搜索....今天我想分享的是关于二叉树
    的头像 发表于 06-06 15:05 9945次阅读
    详解电源<b class='flag-5'>二叉树</b>到底是什么

    C语言二叉树代码免费下载

    本文档的主要内容详细介绍的是C语言二叉树代码免费下载。
    发表于 08-27 08:00 1次下载

    二叉树操作的相关知识和代码详解

    是数据结构中的重中之重,尤其以各类二叉树为学习的难点。在面试环节中,二叉树也是必考的模块。本文主要讲二叉树操作的相关知识,梳理面试常考的内容。请大家跟随小编一起来复习吧。 本篇针对面
    的头像 发表于 12-12 11:04 2014次阅读
    <b class='flag-5'>二叉树</b>操作的相关知识和代码详解

    二叉树的前序遍历非递归实现

    我们之前说了二叉树基础及二叉的几种遍历方式及练习题,今天我们来看一下二叉树的前序遍历非递归实现。 前序遍历的顺序是, 对于
    的头像 发表于 05-28 13:59 1917次阅读

    二叉树所有路径介绍

    以为只用了递归,其实还用了回溯 257. 二叉树所有路径 题目地址:https://leetcode-cn.com/problems/binary-tree-paths/ 给定一个二叉树
    的头像 发表于 08-13 17:51 3188次阅读
    <b class='flag-5'>二叉树</b>的<b class='flag-5'>所有路径</b>介绍

    C语言数据结构:什么是二叉树

    完全二叉树:完全二叉树是效率很高的数据结构。对于深度为K,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1至n的节点一一对应时,称为完全
    的头像 发表于 04-21 16:20 2429次阅读

    怎么就能构造成二叉树呢?

    一直跟着公众号学算法的录友 应该知道,我在二叉树:构造二叉树登场!,已经讲过,只有 中序与后序 和 中序和前序 可以确定一颗唯一的二叉树。前序和后序是不能确定唯一的二叉树的。
    的头像 发表于 07-14 11:20 1499次阅读

    使用C语言代码实现平衡二叉树

    这篇博客主要总结平衡二叉树,所以,二叉排序树知识不会提及,但是会用到。
    的头像 发表于 09-21 11:00 1038次阅读

    二叉树的代码实现

    二叉树的主要操作有遍历,例如有先序遍历、中序遍历、后序遍历。在遍历之前,就是创建一棵二叉树,当然,还需要有删除二叉树的算法。
    的头像 发表于 01-18 10:41 1197次阅读
    <b class='flag-5'>二叉树</b>的代码<b class='flag-5'>实现</b>

    C++构建并复制二叉树

    使用C++构建一个二叉树并复制、输出。
    的头像 发表于 01-10 15:17 983次阅读
    C++构建并复制<b class='flag-5'>二叉树</b>

    C++自定义二叉树并输出二叉树图形

    使用C++构建一个二叉树并输出。
    的头像 发表于 01-10 16:29 1686次阅读
    C++自定义<b class='flag-5'>二叉树</b>并输出<b class='flag-5'>二叉树</b>图形