Advertisement
HXXXXJ

Tree serialization & deserialization

Apr 12th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.88 KB | None | 0 0
  1.  
  2. class Node {
  3.     var children : [Node]
  4.     var value : Int
  5.     init(_ val: Int) {
  6.         value = val
  7.         children = [Node]()
  8.     }
  9. }
  10. //1,-2,-3,—-4,—--5,—--6,-7
  11. let n1 = Node(1)
  12. let n2 = Node(2)
  13. let n3 = Node(3)
  14. let n4 = Node(4)
  15. let n5 = Node(5)
  16. let n6 = Node(6)
  17. let n7 = Node(7)
  18. let n8 = Node(8)
  19.  
  20. n1.children.append(n2)
  21. n1.children.append(n3)
  22. n1.children.append(n7)
  23. n3.children.append(n4)
  24. n3.children.append(n5)
  25. n3.children.append(n6)
  26. n5.children.append(n8)
  27.  
  28. func getTreeString(_ root: Node) -> String{
  29.     var str = ""
  30.     return getStr(root, &str)
  31. }
  32.  
  33. func getStr(_ node: Node, _ prefix: inout String ) -> String{
  34.     var res = "\(prefix)\(node.value)"
  35.     prefix.append("-")
  36.     for child in node.children{
  37.         let sub = getStr(child, &prefix)
  38.         res.append(",\(sub)")
  39.     }
  40.     prefix.removeLast()
  41.     return res
  42. }
  43.  
  44. var str = ""
  45. let res = getTreeString(n1)
  46. print(res)
  47.  
  48.  
  49.  
  50. func buildTree(_ str: String) -> Node{
  51.     let arr = str.split(separator: ",")
  52.     var strarr = [String]()
  53.     for t in arr{
  54.         strarr.append(String(t))
  55.     }
  56.    
  57.     let root = CreatNode(strarr.removeFirst())
  58.     getTree(&strarr, root, 2)
  59.     return root
  60. }
  61.  
  62.  
  63.  
  64. func getTree(_ arr: inout [String], _ root : Node, _ currLevel : Int){
  65.     var res = [Node]()
  66.     while arr.count > 0 {
  67.         let next = arr.first!.count
  68.         if next > currLevel{  // go to next level
  69.             getTree(&arr, res.last!, currLevel + 1)
  70.         }else if next == currLevel {
  71.             let node = CreatNode(arr.removeFirst())
  72.             res.append(node)
  73.         }else{
  74.             break
  75.         }
  76.     }
  77.     root.children = res
  78. }
  79.  
  80. func CreatNode(_ str: String) -> Node {
  81.     var st = str
  82.     while st.first! == "-"{
  83.         st.removeFirst()
  84.     }
  85.     return Node(Int(st)!)
  86. }
  87.  
  88.  
  89.  
  90. let node = buildTree(res)
  91.  
  92. let res2 = getTreeString(node)
  93. print(res2)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement