效果图:

数据库:

操作树的示意图:

控制器代码:

  1. using Dw.Business;
  2. using Dw.Entity;
  3. using Dw.Utilities;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Web.Mvc;
  9. using System.Diagnostics;
  10. using System.Data;
  11.  
  12. namespace Dw.Web.Areas.School.Controllers
  13. {
  14. public class SitesController : PublicController<Sites>
  15. {
  16. SitesBll sitesbll = new SitesBll();
  17. SitesDetailsBll sitesdetailsbll = new SitesDetailsBll();
  18. Sys_UserBll userbll = new Sys_UserBll();
  19. private Sys_DataDictionaryBll Sys_datadictionarybll = new Sys_DataDictionaryBll();
  20. public override ActionResult Form()
  21. {
  22. string KeyValue = Request["KeyValue"];
  23. //添加时获取的Id值
  24. string Id = Request["Id"];
  25. string Name = Request["Name"];
  26.  
  27. Sites entity = new Sites();
  28. string SMSV,ALSV,ParentName="";
  29. if (string.IsNullOrEmpty(KeyValue))
  30. {
  31. SMSV = "";
  32. ALSV = "";
  33. entity = null;
  34. }
  35. else
  36. {
  37. entity = repositoryfactory.Repository().FindEntity(KeyValue);
  38. SMSV = entity.ShowMode;
  39. ALSV = entity.Accesslimit;
  40.  
  41. var pent = repositoryfactory.Repository().FindEntity(entity.ParentId);
  42. ParentName = pent.Name;
  43. }
  44. //显示模式和权限限制下拉菜单
  45. List<Sys_DataDictionaryDetail> ShowModeList = Sys_datadictionarybll.GetDataDictionaryDetailListByCode("ShowMode");
  46. List<Sys_DataDictionaryDetail> Accesslimit = Sys_datadictionarybll.GetDataDictionaryDetailListByCode("Accesslimit");
  47. var sml=ShowModeList.Select(m => new SelectListItem { Text = m.FullName, Value = m.Code });
  48. var al = Accesslimit.Select(m => new SelectListItem { Text = m.FullName, Value = m.Code });
  49. ViewBag.ShowMode = new SelectList(sml, "Value", "Text", SMSV);
  50. ViewBag.Accesslimit = new SelectList(al, "Value", "Text", ALSV);
  51. //获取栏目的父栏目名称和对应的值
  52. ViewBag.Parent = ParentName;
  53. //添加栏目时获取父栏目名称和Id值
  54. if (Id != ""&&Id!=null)
  55. {
  56. var ent = repositoryfactory.Repository().FindEntity(Id);
  57. ViewBag.AddParent = Id + "," + ent.Name;
  58. }
  59.  
  60. if (ManageProvider.Provider.Current().Account == "System")
  61. {
  62. List<Sys_User> userList = userbll.GetList();
  63. //将数据封装到 SelectList中,制定要生成下拉框选项的value和text属性
  64. SelectList uList = new SelectList(userList, "UserId", "RealName");
  65. ViewBag.uList = uList.AsEnumerable();
  66. }
  67. else {
  68. var UserId = ManageProvider.Provider.Current().UserId;
  69. Sys_User User = new Sys_User();
  70. User = userbll.GetList().SingleOrDefault(a => a.UserId == UserId);
  71. string CompanyId = User.CompanyId;
  72. List<Sys_User> userList = userbll.GetList().Where(a => a.CompanyId == CompanyId).ToList();
  73. //将数据封装到 SelectList中,制定要生成下拉框选项的value和text属性
  74. SelectList uList = new SelectList(userList, "UserId", "RealName");
  75. ViewBag.uList = uList.AsEnumerable();
  76. }
  77.  
  78. return View(entity);
  79. }
  80.  
  81. /// <summary>
  82. /// 提交表单
  83. /// </summary>
  84. /// <param name="entity">实体对象</param>
  85. /// <param name="KeyValue">主键值</param>
  86. /// <returns></returns>
  87. [HttpPost]
  88. [ValidateInput(false)]
  89. [LoginAuthorize]
  90. public override ActionResult SubmitForm(Sites entity, string KeyValue)
  91. {
  92. try
  93. {
  94. int IsOk = ;
  95. string Message = KeyValue == "" ? "新增成功。" : "编辑成功。";
  96. if (!string.IsNullOrEmpty(KeyValue))
  97. {
  98. Sites Oldentity = repositoryfactory.Repository().FindEntity(KeyValue);//获取没更新之前实体对象
  99. if (entity.AuditUserId != null)
  100. {
  101. Sys_User User = new Sys_User();
  102. User = userbll.GetEntity(ManageProvider.Provider.Current().UserId);
  103. string AuditUserName = User.RealName;
  104. entity.AuditUserName = AuditUserName;
  105. }
  106. else {
  107.  
  108. }
  109.  
  110. entity.CompanyId= ManageProvider.Provider.Current().CompanyId;
  111. entity.Modify(KeyValue);
  112. IsOk = repositoryfactory.Repository().Update(entity);
  113. if (entity.ParentId != Oldentity.ParentId)
  114. {
  115. sitesbll.UpLR();
  116. }
  117. WriteLog(IsOk, entity, Oldentity, KeyValue, Message);
  118. }
  119. else
  120. {
  121. if (ManageProvider.Provider.Current().Account == "System")
  122. {
  123.  
  124. }
  125. else {
  126.  
  127. if (entity.AuditUserId != null)
  128. {
  129. Sys_User User = new Sys_User();
  130. User = userbll.GetList().SingleOrDefault(a => a.UserId == entity.AuditUserId);
  131. string AuditUserName = User.RealName;
  132. entity.AuditUserName = AuditUserName;
  133. }
  134. else {
  135.  
  136. }
  137.  
  138. entity.CompanyId = ManageProvider.Provider.Current().CompanyId;
  139.  
  140. }
  141. entity.Create();
  142. string strId = SysFactory.BaseHelper().GetSortCode<Sites>("Id").ToString();
  143. entity.Id = int.Parse(strId);
  144. IsOk = repositoryfactory.Repository().Insert(entity);
  145. sitesbll.UpLR();
  146. WriteLog(IsOk, entity, null, KeyValue, Message);
  147. }
  148. return Json(new { Success = true, Code = IsOk.ToString(), Message = Message });
  149. }
  150. catch (Exception ex)
  151. {
  152. WriteLog(-, entity, null, KeyValue, "操作失败:" + ex.Message);
  153. return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
  154. }
  155. }
  156.  
  157. /// <summary>
  158. /// 删除栏目数据
  159. /// </summary>
  160. /// <param name="KeyValue">主键值</param>
  161. /// <returns></returns>
  162. [HttpPost]
  163. [ManagerPermission(PermissionMode.Enforce)]
  164. public ActionResult DeleteClass(string KeyValue)
  165. {
  166. try
  167. {
  168. string Message = "删除失败。";
  169. int IsOk = ;
  170. var sitesdetailsitem = sitesdetailsbll.FindList().Where(a => a.SitesId== int.Parse(KeyValue)).ToList();
  171. var sitesitem = sitesbll.FindList().Where(a => a.ParentId == int.Parse(KeyValue)).ToList();
  172. if (sitesdetailsitem.Count == )
  173. {
  174. if (sitesitem.Count == )
  175. {
  176. sitesbll.DelRelated(int.Parse(KeyValue));
  177. IsOk = repositoryfactory.Repository().Delete(KeyValue);
  178. }
  179.  
  180. else {
  181. Message = "该栏目下含有子栏目,不能删除";
  182. };
  183. }
  184. else {
  185. Message = "该栏目下含有文章,不能删除";
  186. };
  187.  
  188. ////批量父子栏目删除
  189. //sitesbll.DelRelated(int.Parse(KeyValue));
  190. //IsOk = repositoryfactory.Repository().Delete(KeyValue);
  191. if (IsOk > )
  192. {
  193. Message = "删除成功。";
  194. }
  195. WriteLog(IsOk, KeyValue, Message);
  196. return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
  197. }
  198. catch (Exception ex)
  199. {
  200. WriteLog(-, KeyValue, "操作失败:" + ex.Message);
  201. return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
  202. }
  203. }
  204.  
  205. /// <summary>
  206. /// 栏目分类列表(返回树JSON)
  207. /// </summary>
  208. /// <returns></returns>
  209. public ActionResult TreeJson()
  210. {
  211. string CompanyId = ManageProvider.Provider.Current().CompanyId;
  212. var list = repositoryfactory.Repository().FindList("ORDER BY SortCode ASC").Where(a=>a.CompanyId==CompanyId).ToList();
  213. List<TreeJsonEntity> TreeList = new List<TreeJsonEntity>();
  214.  
  215. foreach (Sites item in list)
  216. {
  217. int DataDictionaryId = item.Id;
  218. bool hasChildren = false;
  219. List<Sites> childnode = list.FindAll(t => t.ParentId == DataDictionaryId);
  220. if (childnode.Count > )
  221. {
  222. hasChildren = true;
  223. }
  224. TreeJsonEntity tree = new TreeJsonEntity();
  225. tree.id = DataDictionaryId.ToString();
  226. tree.text = item.Name;
  227. tree.value = item.ParentId.ToString();
  228. tree.Attribute = "IsTree";
  229. //tree.AttributeValue = item.IsTree.ToString();
  230. tree.isexpand = true;
  231. tree.complete = true;
  232. tree.hasChildren = hasChildren;
  233. tree.parentId = item.ParentId.ToString();
  234. TreeList.Add(tree);
  235. }
  236. return Content(TreeList.TreeToJson());
  237. }
  238. public ActionResult TreeGridListJson()
  239. {
  240. string CompanyId = ManageProvider.Provider.Current().CompanyId;
  241. var ListData = sitesbll.GetTable(CompanyId);
  242. var aa = ListData.ToString();
  243. StringBuilder sb = new StringBuilder();
  244. sb.Append("{ \"rows\": ");
  245. sb.Append(ListData.ToJson());
  246. sb.Append("}");
  247. return Content(sb.ToString());
  248. }
  249.  
  250. /// <summary>
  251. /// 上移栏目数据
  252. /// </summary>
  253. /// <param name="KeyValue">主键值</param>
  254. /// <returns></returns>
  255. [HttpPost]
  256. [ManagerPermission(PermissionMode.Enforce)]
  257. public ActionResult Up(string KeyValue)
  258. {
  259. try
  260. {
  261. string Message = "上移失败。";
  262. int IsOk = ;
  263. string CompanyId = ManageProvider.Provider.Current().CompanyId;
  264. var site1= sitesbll.GetEntity(int.Parse(KeyValue));
  265. var level = site1.Level;
  266. var site2 = sitesbll.FindList().SingleOrDefault(a => a.Level == site1.Level && a.CompanyId==CompanyId && a.Rgt==site1.Lft-);
  267. if(site2!=null)
  268. {
  269. int? count1 = site1.Rgt - site1.Lft + ;
  270. int? count2 = site2.Rgt - site2.Lft + ;
  271. var sitesitem1 = sitesbll.FindList().Where(a => a.Lft>=site1.Lft && a.Rgt<=site1.Rgt).ToList();
  272. var sitesitem2 = sitesbll.FindList().Where(a => a.Lft >= site2.Lft && a.Rgt <= site2.Rgt).ToList();
  273. foreach (var item in sitesitem1)
  274. {
  275. item.Lft = item.Lft - count2;
  276. item.Rgt = item.Rgt - count2;
  277. item.Code = item.Code - count2/;
  278. IsOk = repositoryfactory.Repository().Update(item);
  279. }
  280.  
  281. foreach (var item in sitesitem2)
  282. {
  283. item.Lft = item.Lft + count1;
  284. item.Rgt = item.Rgt + count1;
  285. item.Code = item.Code + count1 / ;
  286. IsOk = repositoryfactory.Repository().Update(item);
  287. }
  288. }
  289. else {
  290. Message = "该栏目已经是该等级的最上层栏目不能上移!";
  291. };
  292.  
  293. if (IsOk > )
  294. {
  295. Message = "上移成功。";
  296. }
  297. WriteLog(IsOk, KeyValue, Message);
  298. return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
  299. }
  300. catch (Exception ex)
  301. {
  302. WriteLog(-, KeyValue, "操作失败:" + ex.Message);
  303. return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
  304. }
  305. }
  306.  
  307. /// <summary>
  308. /// 下移栏目数据
  309. /// </summary>
  310. /// <param name="KeyValue">主键值</param>
  311. /// <returns></returns>
  312. [HttpPost]
  313. [ManagerPermission(PermissionMode.Enforce)]
  314. public ActionResult Down(string KeyValue)
  315. {
  316. try
  317. {
  318. string Message = "下移失败。";
  319. int IsOk = ;
  320. string CompanyId = ManageProvider.Provider.Current().CompanyId;
  321. var site1 = sitesbll.GetEntity(int.Parse(KeyValue));
  322. var level = site1.Level;
  323. var site2 = sitesbll.FindList().SingleOrDefault(a => a.Level == site1.Level && a.CompanyId == CompanyId && a.Lft== site1.Rgt + );
  324. if (site2 != null)
  325. {
  326. int? count1 = site1.Rgt - site1.Lft + ;
  327. int? count2 = site2.Rgt - site2.Lft + ;
  328. var sitesitem1 = sitesbll.FindList().Where(a => a.Lft >= site1.Lft && a.Rgt <= site1.Rgt).ToList();
  329. var sitesitem2 = sitesbll.FindList().Where(a => a.Lft >= site2.Lft && a.Rgt <= site2.Rgt).ToList();
  330. foreach (var item in sitesitem1)
  331. {
  332. item.Lft = item.Lft + count2;
  333. item.Rgt = item.Rgt + count2;
  334. item.Code = item.Code + count2 / ;
  335. IsOk = repositoryfactory.Repository().Update(item);
  336. }
  337. foreach (var item in sitesitem2)
  338. {
  339. item.Lft = item.Lft - count1;
  340. item.Rgt = item.Rgt - count1;
  341. item.Code = item.Code - count1 / ;
  342. IsOk = repositoryfactory.Repository().Update(item);
  343. }
  344. }
  345. else {
  346. Message = "该栏目已经是该等级的最下层栏目不能下移!";
  347. };
  348.  
  349. if (IsOk > )
  350. {
  351. Message = "下移成功。";
  352. }
  353. WriteLog(IsOk, KeyValue, Message);
  354. return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
  355. }
  356. catch (Exception ex)
  357. {
  358. WriteLog(-, KeyValue, "操作失败:" + ex.Message);
  359. return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
  360. }
  361. }
  362.  
  363. }
  364. }

逻辑层代码:

  1. using Dw.Entity;
  2. using Dw.Repository;
  3. using Dw.Utilities;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Text;
  7. using Dw.DataAccess;
  8. using System.Data.Common;
  9.  
  10. namespace Dw.Business
  11. {
  12. /// <summary>
  13. /// 网站栏目管理
  14. /// </summary>
  15. public class SitesBll : RepositoryFactory<Sites>
  16. {
  17. public List<Sites> GetList()
  18. {
  19. StringBuilder WhereSql = new StringBuilder();
  20.  
  21. ////有问题暂时这块先不设置此处的权限数据范围
  22. //if (!ManageProvider.Provider.Current().IsSystem)
  23. //{
  24. // WhereSql.Append(" And (Id In (Select ResourceId From Sys_DataScopePermission Where");
  25. // WhereSql.Append(" ObjectId IN ('" + ManageProvider.Provider.Current().ObjectId.Replace(",", "','") + "') ");
  26. // WhereSql.Append(" ) )");
  27. //}
  28. WhereSql.Append(" ORDER BY Code,SortCode ASC");
  29. return Repository().FindList(WhereSql.ToString());
  30. }
  31.  
  32. //public DataTable GetTable(ref JqGridParam jqgridparam)
  33. public DataTable GetTable(string CompanyId)
  34. {
  35. StringBuilder strSql = new StringBuilder();
  36. strSql.Append(@"Select S.Id,
  37. S.CompanyId,
  38. S.Code,
  39. S.Expanded,
  40. S.ParentId,
  41. S.Name,
  42. S.[Level],
  43. S.Lft,
  44. S.Rgt,
  45. S.KeyWords,
  46. S.Url,
  47. S.PictureUrl,
  48. D.FullName AS ShowMode,
  49. S.Style,
  50. L.FullName AS Accesslimit,
  51. S.IsNav,
  52. S.IsBlank,
  53. S.SortCode,
  54. S.CopyId,
  55. S.CreateDate,
  56. S.CreateUserId,
  57. S.CreateUserName,
  58. S.ModifyUserId,
  59. S.ModifyDate,
  60. S.ModifyUserName,
  61. S.AuditUserName
  62. FROM Sites AS S
  63. INNER JOIN
  64. (SELECT DataDictionaryId, FullName, Code
  65. FROM Sys_DataDictionaryDetail
  66. WHERE (DataDictionaryId IN (SELECT DataDictionaryId FROM Sys_DataDictionary WHERE (Code = 'ShowMode')))
  67. ) AS D ON S.ShowMode = D.Code
  68.  
  69. INNER JOIN
  70. (SELECT DataDictionaryId, FullName, Code
  71. FROM Sys_DataDictionaryDetail
  72. WHERE (DataDictionaryId IN (SELECT DataDictionaryId FROM Sys_DataDictionary WHERE (Code = 'Accesslimit')))
  73. ) AS L ON S.Accesslimit = L.Code");
  74. if (!string.IsNullOrEmpty(CompanyId))
  75. {
  76. strSql.Append(" And S.CompanyId ="+"'" + CompanyId + "" + "' ");
  77. }
  78. strSql.Append(" ORDER BY Code,SortCode ASC");
  79. return DataFactory.Database().FindTableBySql(strSql.ToString());
  80. //strSql.Append(@"SELECT * FROM Sites Where 1=1");
  81. //return Repository().FindTablePageBySql(strSql.ToString(), null, ref jqgridparam);
  82. }
  83. /// <summary>
  84. /// 获取指定ParentId的List
  85. /// </summary>
  86. /// <param name="ParentId"></param>
  87. /// <returns></returns>
  88. public List<Sites> GetList(int ParentId)
  89. {
  90. StringBuilder WhereSql = new StringBuilder();
  91. //if (!ManageProvider.Provider.Current().IsSystem)
  92. //{
  93. // WhereSql.Append(" And (Id In (Select ResourceId From Sys_DataScopePermission Where");
  94. // WhereSql.Append(" ObjectId IN ('" + ManageProvider.Provider.Current().ObjectId.Replace(",", "','") + "') ");
  95. // WhereSql.Append(" ) )");
  96. //}
  97. WhereSql.Append(" And ParentId=" + ParentId + "");
  98. WhereSql.Append(" ORDER BY Code,SortCode ASC");
  99. return Repository().FindList(WhereSql.ToString());
  100. }
  101.  
  102. public List<Sites> FindList()
  103. {
  104. return Repository().FindList();
  105. }
  106.  
  107. public Sites GetEntity(int KeyValue)
  108. {
  109. return Repository().FindEntity(KeyValue);
  110. }
  111. #region 无限分级的递归Left和Right赋值操作
  112. int index = , Level = -, i = ;
  113. /// <summary>
  114. /// 无限分级的递归Left和Right赋值操作
  115. /// </summary>
  116. /// <param name="ParentId"></param>
  117. public void UpLR(int ParentId)
  118. {
  119. Level++;
  120. List<Sites> listData = GetList(ParentId);
  121. var sites = new Sites();
  122. foreach (var entity in listData)
  123. {
  124. sites.Id = entity.Id;
  125. sites.Lft = index;
  126. sites.Level = Level;
  127. sites.Code = i++;
  128. index++;
  129. UpLR(entity.Id);
  130. sites.Rgt = index;
  131. index++;
  132. DataFactory.Database().Update(sites);
  133. }
  134. Level--;
  135. }
  136. #endregion
  137.  
  138. #region 递归删除栏目和子栏目
  139. public void DelRelated(int Id)
  140. {
  141. string delstr = "";
  142. var plist = Repository().FindList("ParentId", Id);
  143. foreach (var item in plist)
  144. {
  145. delstr += item.Id + ",";
  146. DelRelated(item.Id);
  147. }
  148. Repository().Delete(delstr.Split(',')); //批量删除
  149. }
  150. #endregion
  151.  
  152. }
  153. }

C#使用二叉树算法设计一个无限分级的树表的更多相关文章

  1. 基于react实现无限分级菜单

    在开发CMS(内容管理系统)系统时,一般都会用到一个侧边栏或者顶部的二级或者三级菜单,当点击或者鼠标悬浮时,菜单能够随之展开或收起. 本文纯粹为了练习一下react,因此我会在react环境下实现这么 ...

  2. 转:打造DropDownList,TreeView,ListBox无限极分类目录树

    [csharp] view plaincopyprint? #region DropDownList无限递归显示层次关系 /// <summary> /// 创建无限分级下拉列表框 /// ...

  3. 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称

    转载请注明出处:http://blog.csdn.net/u012860063 问题:设单链表中存放n个字符.试设计一个算法,使用栈推断该字符串是否中心对称,如xyzzyx即为中心对称字符串. 代码例 ...

  4. 笔试题&amp;面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素

    设计一个复杂度为n的算法找到单向链表倒数第m个元素.最后一个元素假定是倒数第0个. 提示:双指针查找 相对于双向链表来说,单向链表仅仅能从头到尾依次訪问链表的各个节点,所以假设要找链表的倒数第m个元素 ...

  5. python学习:设计一个算法将缺失的数字找出来。

    算法题   已知整型数值 a[99], 包含的所有99个元素都是从1-100中随机取值,并且这99个数两两互不相等,也就是说从1到100这100个数字有99个在数值内,有一个缺失.请设计一个算法将缺失 ...

  6. 设子数组A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1)。试设计一个合并这2个子数组为排好序的数组A[0:N-1]的算法。

    设子数组A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1).试设计一个合并这2个子数组为排好序的数组A[0:N-1]的算法.要求算法在最坏情况下所用的计算时间为O(N),只用到O(1)的辅助 ...

  7. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  8. 在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

    //在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边. // 例如: 当输入a = {8,4,1,6,7,4,9,6,4}, // a = {1,7,9,8,4,6,4 ...

  9. 痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的开源项目 RT-UFL. 痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法.我们 ...

随机推荐

  1. 七、考反映小游戏《苹果iOS实例编程入门教程》

    该app为应用的功能为一个简单的考反应游戏 纲要:-UIButton, UILabel, UIImageView 的运用:-利用rendom增加游戏可玩性: 游戏说明: 在按下开始游戏后,分为三盏的指 ...

  2. [LintCode] Coins in a Line II 一条线上的硬币之二

    There are n coins with different value in a line. Two players take turns to take one or two coins fr ...

  3. [LintCode] Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths.Example Given the following binary tree: 1 /   \2 ...

  4. java 反取字符串

    public class demo2 { /** * 2 : 将字符串反取出来 新中国好 好国中新 */ public static void main(String[] args) { String ...

  5. 解析私有IP地址和公网IP地址

    局域网私有IP地址上外网的原理 IP地址分为两部分,网络号和主机号,这种分法应用在私有和公有IP地址上.一个局域网中,为了该局域网的安全,我们应用了私有IP地址,为了和Internet中的其他主机进行 ...

  6. SDWebImage笔记

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  7. java 极光推送

    Web.xml配置文件 <context-param> <param-name>contextConfigLocation</param-name> <par ...

  8. 栈的C++实现(数组)——创建-push-pop-top-清空栈-处理栈

    今天学习了利用数组方式的栈的C++实现,这种方式跟指针实现有很多不一样的地方: 栈的指针实现,栈的创建申请头结点,push需要申请新的结点,pop释放结点,这些结点都放在第一个位置,top时,S-&g ...

  9. 20145334赵文豪 《Java程序设计》第1周学习总结

    20145334赵文豪 <Java程序设计>第1周学习总结 教材学习内容总结 第一周的学习在紧张中结束了,我们这周了解了各门课的基本内容与授课形式,在第一周java课程的的学习中我们学习了 ...

  10. ThinkPHP 3.2.3 简单后台模块开发(二)RBAC

    RBAC(Role-Based Access Controll)基于角色的访问控制 在 ThinkPHP3.2.3 中 RBAC 类位于 /ThinkPHP/Library/Org/Util/Rbac ...