如先序遍历得到如下字符串:ABDE##F##G##HI###
对应二叉树如图一所示:

class Node{
var val : Character
var left : Node?
var right : Node?
init(_ val : Character) {
self.val = val
self.left = nil
self.right = nil
}
}
struct test {
static var index = 0
}
class NodeList {
var root : Node?
func creatPreBt(_ arr : [Character]) -> Node?{
if test.index >= arr.count{
return nil
}
let val = arr[test.index]
test.index += 1
var node : Node? = nil
if val != "#"{
node = Node(val)
node?.left = creatPreBt(arr)
node?.right = creatPreBt(arr)
}
return node
}
func preOrder(_ node : Node?) -> [Character] {
var res = [Character]()
preOrderHelper(node,arr: &res)
return res
}
func preOrderHelper(_ node : Node? , arr : inout [Character]) {
if let node = node{
arr.append(node.val)
preOrderHelper(node.left ,arr: &arr)
preOrderHelper(node.right ,arr: &arr)
}
}
}
let arr = Array(String("ABDE##F##G##HI###"))
let list = NodeList()
list.root = list.creatPreBt(arr)
print(list.preOrder(list.root))
先序打印结果为:
["E", "D", "F", "B", "G", "A", "I", "H"]
网友评论