c# – 从表中水合树
发布时间:2020-12-15 17:21:11 所属栏目:百科 来源:网络整理
导读:我有一个包含所有节点的DataTable.他们被序列化到数据库.我想创建一个数据的对象图(分层)表示.似乎有一些方法可以做到这一点. This article describes a high order method(意味着它在完全构建树之前涉及大量的DataTable搜索) 是否有订单N方法?在我的例子中
我有一个包含所有节点的DataTable.他们被序列化到数据库.我想创建一个数据的对象图(分层)表示.似乎有一些方法可以做到这一点.
This article describes a high order method(意味着它在完全构建树之前涉及大量的DataTable搜索) 是否有订单N方法?在我的例子中,我已经将DataTable中树的节点预先排序为有序形式.意思是,第一行显示父项的NULL,因为它是根.每个后续行都在in-order notation中排序. 我似乎回想起我上学时的N-Order方法.但我不记得了. 我的DataTable架构类似于: > NodeID – int 解决方法
这是一个算法,应该做你需要它做的事情.它假设您的数据是有序的,因此它在O(n)中执行.
首先,您需要一个如下所示的节点: class Node { Node Parent; List<Node> Children = new List<Node>(); int NodeId; string Data; public Node(NodeRow row) { ... } } >将第一行加载为当前行. 而已!如果您的数据保证结构正确,那么您将不需要进行任何额外的空检查. 样品: Node CreateTree(IEnumerable<NodeRow> rows) { Node root = null; Node current = null; foreach (var row in rows) { // Root: if (root == null) { root = current = new Node(row); continue; } // Traverse up the tree until the parent is found: while (row.ParentNodeId != current.NodeId) { current = current.Parent; } // Add the new node as a child of the current one: var rowNode = new Node(row); rowNode.Parent = current; current.Children.Add(rowNode); current = rowNode; } return root; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |