问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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种算法的时间复杂度均为:  。

最新文章

  1. Markdown 新手指南
  2. Delaunay剖分与平面欧几里得距离最小生成树
  3. ionic 界面数据缓存问题
  4. DataList删除操作
  5. Unity3D特效-场景淡入淡出
  6. swift如何动态创建对象
  7. R语言画图基础参数设置
  8. BZOJ 1584 打扫卫生
  9. CentOS Linux下一个tomcat起停,查看日志的shell script
  10. Unity3D战争迷雾效果
  11. XE7 - Image的双击事件无响应,咋整?(已解决)
  12. 我常用的VBS方法(QTP)
  13. Unity中Mecanim工作流
  14. 伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra
  15. spring boot 2.0 WebMvcConfigurerAdapter过时解决方法
  16. XSS漏洞解析(一)
  17. maven 构建spring boot + mysql 的基础项目
  18. mysql乐观锁总结和实践(二)
  19. Linux下逻辑地址-线性地址-物理地址图解(转)
  20. git push报错:error: RPC failed; result=22, HTTP code = 413

热门文章

  1. 2. import 与 from...import 导入模块
  2. Python Ethical Hacking - Malware Packaging(4)
  3. Dresdon简介
  4. 题解 P1484 种树
  5. 在 vue 中使用 WebSocket
  6. map数据按照list排序
  7. 题解 洛谷 P4569 【[BJWC2011]禁忌】
  8. 干货分享丨玩转物联网IoTDA服务系列四-智能网关
  9. Java环境变量设置:Path、CLASSPATH、JAVA_HOME的作用分别是什么?
  10. paramiko上传文件到Linux