build_tree.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package utils
  2. import (
  3. "container/list"
  4. "git.i2edu.net/i2/i2-bill-erp/transform"
  5. )
  6. func BuildTree(nodes *[]*transform.TreeNode) ([]*transform.TreeNode, error) {
  7. originNodeList := list.New()
  8. treeNodeList := list.New()
  9. var rootArr []*transform.TreeNode
  10. for _, node := range *nodes {
  11. if node.Parent == 0 {
  12. treeNodeList.PushBack(node)
  13. rootArr = append(rootArr, node)
  14. } else {
  15. originNodeList.PushBack(node)
  16. }
  17. }
  18. // 把子节点根据parent分配到对应的父节点上
  19. for ele := treeNodeList.Front(); ele != nil; ele = ele.Next() {
  20. treeNode := ele.Value.(*transform.TreeNode)
  21. originEle := originNodeList.Front()
  22. if originEle == nil {
  23. break
  24. }
  25. for originEle != nil {
  26. originNextEle := originEle.Next()
  27. originNode := originEle.Value.(*transform.TreeNode)
  28. if originNode.Parent == treeNode.Id {
  29. treeNodeList.InsertAfter(originNode, ele)
  30. treeNode.Nodes = append(treeNode.Nodes, originNode)
  31. originNodeList.Remove(originEle)
  32. }
  33. originEle = originNextEle
  34. }
  35. }
  36. return rootArr, nil
  37. }