private void GetCodeList(RegionTreeNode tree, List <RegionTreeNode> codeList) { foreach (var node in tree.Children) { codeList.Add(new RegionTreeNode() { Id = node.Id, RegionCode = node.RegionCode }); GetCodeList(node, codeList); } }
private RegionTreeNode RegionTreeNodeClone(RegionTreeNode node) { return(new RegionTreeNode { Id = node.Id, ParentId = node.ParentId, Name = node.Name, DisplayOrder = node.DisplayOrder, Initial = node.Initial, Initials = node.Initials, Pinyin = node.Pinyin, Extra = node.Extra, Suffix = node.Suffix, ZipCode = node.ZipCode, RegionCode = node.RegionCode, HasChildren = node.HasChildren, Children = node.Children, }); }
/// <summary> /// 查询交汇点节点 /// </summary> /// <param name="intersection"></param> /// <returns></returns> private RegionTreeNode GetIntersectionChild(RegionTreeNode tree, long intersection) { if (tree.Id == intersection) { return(tree); } //保证节点遍历完 foreach (var node in tree.Children) { if (node.Id == intersection) { return(node); } } foreach (var node in tree.Children) { return(GetIntersectionChild(node, intersection)); } return(null); }
private void RegionTreeAddChildren(List <RegionInfo> regions, RegionTreeNode node) { for (var i = 0; i < regions.Count; i++) { var item = regions[i]; if (item.ParentId == node.Id) { if (node.Children == null) { node.Children = new List <RegionTreeNode>(); } var child = RegionTreeNodeFromRegion(item); // 在父节点的 ParentIdPath 基础上增加 ParentId child.ParentIdPath = node.ParentIdPath != null ? new List <int>(node.ParentIdPath) : new List <int>(1); child.ParentIdPath.Add(node.Id); node.Children.Add(child); RegionTreeAddChildren(regions, child); } } }
/// <summary> /// 查询两棵树的交汇点(最低的子节点) /// </summary> /// <param name="tree"></param> /// <param name="isExistTree"></param> /// <returns></returns> private long GetIntersection(RegionTreeNode tree, RegionTreeNode isExistTree) { var treeCodeList = new List <RegionTreeNode>(); treeCodeList.Add(new RegionTreeNode() { Id = tree.Id, RegionCode = tree.RegionCode }); GetCodeList(tree, treeCodeList); var isExistTreeCodeList = new List <RegionTreeNode>(); isExistTreeCodeList.Add(new RegionTreeNode() { Id = isExistTree.Id, RegionCode = isExistTree.RegionCode }); GetCodeList(isExistTree, isExistTreeCodeList); //查询重复的,最大的code var intersectCodeList = (from t in treeCodeList from i in isExistTreeCodeList where t.Id == i.Id select t).ToList(); var target = new RegionTreeNode() { RegionCode = "" }; foreach (var code in intersectCodeList) { //不同层级依次添加编码 //eg.湖北省为42,武汉市为4201,汉阳区为420105 //这里寻找子节点 if (target.RegionCode.Length < code.RegionCode.Length) { target = code; } } return(target.Id); }
private async Task <RegionTreeNode> GetTree(RegionTree d) { RegionTreeNode tree = new RegionTreeNode(); List <RegionTree> list = new List <RegionTree>(); //向上查询树 var parent = await db.Regions.FirstOrDefaultAsync(x => x.RegionCode == d.RegionParentCode); list.Add(d); if (parent != null) { list.Add(parent); } int count = 0; //防止死循环 while (parent != null && count < 5) { parent = await db.Regions.FirstOrDefaultAsync(x => x.RegionCode == parent.RegionParentCode); if (parent != null) { list.Add(parent); } count++; } //处理成树结构 tree = ConvertToTreeNode(list[list.Count - 1]); tree.Children = new List <RegionTreeNode>(); var node = tree.Children; for (int i = list.Count - 2; i >= 0; i--) { var t = ConvertToTreeNode(list[i]); node.Add(t); node[0].Children = new List <RegionTreeNode>(); node = node[0].Children; } return(tree); }
private RegionTreeNode FindRegion(List <RegionTreeNode> regions, int regionId) { RegionTreeNode region = null; foreach (var node in regions) { if (node.Id == regionId) { region = node; break; } else if (node.HasChildren && node.Children != null && node.Children.Count > 0) { var child = FindRegion(node.Children, regionId); if (child != null) { region = child; break; } } } return(region); }