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

    浏览量

    12231

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

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

收藏 人收藏

    评论

    相关推荐

    二叉树二叉树的性质(1)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:06:44

    二叉树二叉树的性质(2)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:08:32

    二叉树二叉树的性质(3)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:09:51

    平衡二叉树(2)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:43:54

    平衡二叉树(3)#数据结构

    数据函数二叉树
    未来加油dz
    发布于 :2023年09月05日 09:45:06

    计算机二叉树的问题

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

    二叉树删除算法

    二叉树的删除操作主要是寻找替代点来进行替换操作。方法:先右转,再一直左转,直到左连接为空的那个点。然后,摘取出来,完成链接指向操作。public void deletmin(void){ root
    发表于 12-30 20:55

    二叉查找(GIF动图讲解)

    二叉查找(Binary Search Tree),也称二叉搜索,是指一棵空或者具有下列性质的二叉树
    发表于 07-29 15:24

    2016大疆笔试题与总结(编程类)

    总体来说,大疆的题目不算太难。尤其是编程题,思路很清晰,不涉及到太复杂的算法。只有第三题可能涉及到递归操作(软肋)。其中第题有关完全二叉树的操作,只需要知道完全二叉树的四个重要性质就对了,借助数学
    发表于 11-21 15:28

    用C语言构建一个二叉树失败

    ; ,tree.leftnode->data);这三个输出都是乱码,我不知道二叉树的建立过程中问题在哪里,我应该在每个节点都分配了内存,不过结果好像有问题}
    发表于 03-24 03:47

    什么是“红黑”看了就知道

    今天我们要说的红黑就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较
    发表于 10-27 17:00

    Java编程求二叉树的镜像两种方法介绍

    给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。仔细分析这两棵的特点,看看能不能总结出求镜像的步骤。这两棵的根节点相
    发表于 12-16 16:25

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

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

    二叉树所有路径介绍

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

    二叉树的代码实现

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