C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
2024-10-09 15:20:55
问题
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 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
\
5Output: ["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种算法的时间复杂度均为: 。
最新文章
- Markdown 新手指南
- Delaunay剖分与平面欧几里得距离最小生成树
- ionic 界面数据缓存问题
- DataList删除操作
- Unity3D特效-场景淡入淡出
- swift如何动态创建对象
- R语言画图基础参数设置
- BZOJ 1584 打扫卫生
- CentOS Linux下一个tomcat起停,查看日志的shell script
- Unity3D战争迷雾效果
- XE7 - Image的双击事件无响应,咋整?(已解决)
- 我常用的VBS方法(QTP)
- Unity中Mecanim工作流
- 伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra
- spring boot 2.0 WebMvcConfigurerAdapter过时解决方法
- XSS漏洞解析(一)
- maven 构建spring boot + mysql 的基础项目
- mysql乐观锁总结和实践(二)
- Linux下逻辑地址-线性地址-物理地址图解(转)
- git push报错:error: RPC failed; result=22, HTTP code = 413
热门文章
- 2. import 与 from...import 导入模块
- Python Ethical Hacking - Malware Packaging(4)
- Dresdon简介
- 题解 P1484 种树
- 在 vue 中使用 WebSocket
- map数据按照list排序
- 题解 洛谷 P4569 【[BJWC2011]禁忌】
- 干货分享丨玩转物联网IoTDA服务系列四-智能网关
- Java环境变量设置:Path、CLASSPATH、JAVA_HOME的作用分别是什么?
- paramiko上传文件到Linux