swift先序创建二叉树

2019-10-29  本文已影响0人  前年的邂逅_Jerry

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


图一.png

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"]
上一篇 下一篇

猜你喜欢

热点阅读