当前位置: 首页 > news >正文

LeetCode -- Path Sum ||


题目:
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.
给定一棵树, 从根节点出发,查找所有和为K的路径的集合


思路:
1. 树遍历,递归时维护sum变量
2. 到叶子节点时判断sum的值是否为K


实现:





void Main()
{


	var r = new TreeNode(5);
	r.left = new TreeNode(4);
	r.right = new TreeNode(8);
	
	r.left.left = new TreeNode(11);
	r.left.left.left = new TreeNode(7);
	r.left.left.right = new TreeNode(2);
	
	r.right.left = new TreeNode(13);
	r.right.right = new TreeNode(4);
	r.right.right.left = new TreeNode(5);
	r.right.right.right = new TreeNode(1);
	
	var s = new Solution();
	var rr = s.PathSum(r,22);
	Console.WriteLine(rr);
}


 public class TreeNode 
 {
	      public int val;
	      public TreeNode left;
	      public TreeNode right;
	      public TreeNode(int x) { val = x; }
	  };
	 
	public class Solution {
    
        private int _sum;
		private IList<IList<int>> ret;
		
		public Solution(){
			ret = new List<IList<int>>();
		}
	
	    public IList<IList<int>> PathSum(TreeNode root, int sum) {
	        _sum = sum;
			
			if(root == null || root.left == null && root.right == null && sum == 0){
				return ret;
			}
			
			// has no child
			if(root.left == null && root.right == null){
				ret.Add(new List<int>(){root.val});
				return ret;
			}
			
			Travel(root, root.val.ToString() ,root.val);
			return ret;
	    }


		public void Travel(TreeNode parent , string path ,int sumPath){
			if(parent.left == null && parent.right == null && sumPath == _sum){
				// convert string to list<int>
				var p = path.Split(',');
				var r = new List<int>();
				for(var i = 0;i < p.Length; i++){
					r.Add(int.Parse(p[i]));
				}
				// store path
				ret.Add(r);
				return;
			}
			
			if(parent.left != null){
			// track path then go left
				Travel(parent.left, path + "," + parent.left.val, sumPath + parent.left.val);
			}
			
			if(parent.right != null){
			// track path then go right
				Travel(parent.right, path + "," + parent.right.val, sumPath + parent.right.val);
			}
		}
}


相关文章:

  • 35岁IT“老人”的随笔
  • LeetCode -- Decode Ways
  • 嵌入式Linux系统中的GUI系统的研究与移植
  • LeetCode -- Substring with Concatenation of All Words
  • asp.net MVC5 sitemap 的使用
  • CentOS 5.x 預設啟動的服務簡易說明
  • Leet -- Remove Duplicates from Sorted Array
  • LeetCode -- Best Time to Buy and Sell Stock II
  • 海闊天空 信樂團
  • Contains Duplicate III
  • LeetCode -- Combination Sum
  • MySQL添加用户
  • LeetCode -- Candy
  • Leet -- Plus One
  • Leet -- Generate Parentheses
  • 《Java编程思想》读书笔记-对象导论
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2017前端实习生面试总结
  • Angular6错误 Service: No provider for Renderer2
  • Computed property XXX was assigned to but it has no setter
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js继承的实现方法
  • Linux快速复制或删除大量小文件
  • maven工程打包jar以及java jar命令的classpath使用
  • nodejs:开发并发布一个nodejs包
  • uva 10370 Above Average
  • Web设计流程优化:网页效果图设计新思路
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 想写好前端,先练好内功
  • 函数计算新功能-----支持C#函数
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (ros//EnvironmentVariables)ros环境变量
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (七)Knockout 创建自定义绑定
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)程序员疫苗:代码注入
  • (转)项目管理杂谈-我所期望的新人
  • (转载)Linux网络编程入门
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET CLR基本术语
  • .NET CORE Aws S3 使用
  • .net web项目 调用webService
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 中让 Task 支持带超时的异步等待