问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4082 访问。

给定一个二叉树,返回所有从根节点到叶子节点的路径。

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

输入:

1

 /   \

2     3

 \

  5

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

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3


Given a binary tree, return all root-to-leaf paths.

Note: A leaf is a node with no children.

Input:

1

 /   \

2     3

 \

  5

Output: ["1->2->5", "1->3"]

Explanation: All root-to-leaf paths are: 1->2->5, 1->3


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4082 访问。

public class Program {

    public static void Main(string[] args) {
var root = new TreeNode(1) {
left = new TreeNode(2) {
right = new TreeNode(5)
},
right = new TreeNode(3)
}; var res = BinaryTreePaths(root);
ShowArray(res); root.right.right = new TreeNode(4); res = BinaryTreePaths2(root);
ShowArray(res); Console.ReadKey();
} private static void ShowArray(IList<string> array) {
foreach(var num in array) {
Console.Write($"{num} ");
}
Console.WriteLine();
} public static IList<string> BinaryTreePaths(TreeNode root) {
var list = new List<string>();
if(root != null) {
var left = BinaryTreePaths(root.left);
var right = BinaryTreePaths(root.right);
var current = root.val.ToString();
if(left.Count == 0 && right.Count == 0) {
list.Add(current);
} else {
if(left.Count != 0) {
foreach(var str in left) {
list.Add(current + "->" + str);
}
}
if(right.Count != 0) {
foreach(var str in right) {
list.Add(current + "->" + str);
}
}
}
}
return list;
} public static IList<string> BinaryTreePaths2(TreeNode root) {
var res = new List<string>();
if(root == null) return res;
TreePaths(res, root, root.val + "");
return res;
} public static void TreePaths(IList<string> res, TreeNode root, string path) {
if(root.left == null && root.right == null)
//若左右子节点都为空,本次路径结束,直接添加到 List
res.Add(path);
if(root.left != null)
//若左子节点不为空,则将左子节点拼接之后参与下次递归
TreePaths(res, root.left, path + "->" + root.left.val);
if(root.right != null)
//若右子节点不为空,则将右子节点拼接之后参与下次递归
TreePaths(res, root.right, path + "->" + root.right.val);
} public class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x) { val = x; }
} }

以上给出2种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4082 访问。

1->2->5 1->3
1->2->5 1->3->4

分析:

显而易见,以上2种算法的时间复杂度均为:  。

C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)的更多相关文章

  1. [Swift]LeetCode257. 二叉树的所有路径 | Binary Tree Paths

    Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example ...

  2. 【leetcode刷题笔记】Convert Sorted List to Binary Search Tree

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

  3. LeetCode刷题知识点总结——二叉树

    二叉树 一.二叉树理论基础 1.满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.通俗话理解:从底层开始到顶部的所有节点都全部填满的二叉树.深 ...

  4. C#LeetCode刷题之#100-相同的树(Same Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4066 访问. 给定两个二叉树,编写一个函数来检验它们是否相同. ...

  5. 【leetcode刷题笔记】Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 题解 ...

  6. C#LeetCode刷题-树

    树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历   61.6% 中等 95 不同的二叉搜索树 II   43.4% 中等 96 不同的二叉搜索树   51.6% 中等 98 验证二叉搜索树 ...

  7. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  8. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

  9. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

随机推荐

  1. Python Ethical Hacking - MAC Address & How to Change(3)

    SIMPLE ALGORITHM Goal  -> Check if MAC address was changed. Steps: 1. Execute and read ifconfig. ...

  2. C++语法小记---函数重载

    函数重载 函数重载的本质是对已有功能的扩展 构成重载的三大条件 函数名相同 参数列表不通(与返回值无关) 重载函数的作用域相同 成员函数之间可以重载,成员函数和静态成员函数之间可以构成重载,全局函数之 ...

  3. Puppeteer爬虫实战(二)

    连接浏览器 上一篇说到了Puppeteer本质是使用了Chrome Devtools协议控制浏览器,本篇就说说连接方式. 常规Hook浏览器 此方式其实就是需要一个浏览器可执行文件(不同平台需要下载对 ...

  4. INSERT插入WHERE判断是否插入(MySQL)

    一.INSERT INTO IF EXISTS 具体语法:INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'f ...

  5. 更改docker默认存储路径操作(centos6版本)

    一. centos6版本  service启动方式 1.更改启动文件 vim /etc/sysconfig/docker   添加更改的路径 '--graph="/data/docker&q ...

  6. 全栈的自我修养: 0005 Java 包扫描实现和应用(Jar篇)

    全栈的自我修养: 0005 Java 包扫描实现和应用(Jar篇) It's not the altitude, it's the attitude. 决定一切的不是高度而是态度. Table of ...

  7. 如何导入spring 的jar包到eclips

    https://www.cnblogs.com/xxuan/p/6949640.html

  8. hcharts生成图表

    借助hcharts插件,可以很方便地在模板页面中生成图表.类似插件还有echarts. 补充...

  9. PHP strrpos() 函数

    实例 查找 "php" 在字符串中最后一次出现的位置: <?php高佣联盟 www.cgewang.comecho strrpos("I love php, I l ...

  10. Sharding-JDBC实现读写分离

    参考资料:猿天地  https://mp.weixin.qq.com/s/kp2lJHpTMz4bDWkJYjVbOQ  作者:尹吉欢 技术选型:SpringBoot + Sharding-JDBC ...