实现二叉树的前、中、后序遍历

2021-02-22  本文已影响0人  梁森的简书

前、中、后序遍历都是相对于父节点说的
前序遍历

func preErgodic() -> Queue<String> {
        var queue = Queue<String>()
        preErgodic(node: root, queue: &queue)
        return queue
    }
    func preErgodic(node: TreeNode?, queue: inout Queue<String>) {
        if node == nil {
            return
        }
        queue.enQueue(item: node?.key ?? "")
        if node?.left != nil {
            preErgodic(node: node?.left, queue: &queue)
        }
        if node?.right != nil {
            preErgodic(node: node?.right, queue: &queue)
        }
    }

中序遍历

func middleErgodic() -> Queue<String> {
        var queue = Queue<String>()
        middleErgodic(node: root, queue: &queue)
        return queue
    }
    func middleErgodic(node: TreeNode?, queue: inout Queue<String>) {
        if node == nil {
            return
        }
        if node?.left != nil {
            // 通过递归把左子树中的所有键放入队列中
            middleErgodic(node: node?.left, queue: &queue)
        }
        // 将节点的键放入队列中
        queue.enQueue(item: node?.key ?? "")
        if node?.right != nil {
            // 通过递归把右子树中的所有键放入队列中
            middleErgodic(node: node?.right, queue: &queue)
        }
    }

后序遍历

func afterErgodic() -> Queue<String> {
        var queue = Queue<String>()
        afterErgodic(node: root, queue: &queue)
        return queue
    }
    func afterErgodic(node: TreeNode?, queue: inout Queue<String>) {
        if node == nil {
            return
        }
        if node?.left != nil {
            afterErgodic(node: node?.left, queue: &queue)
        }
        if node?.right != nil {
            afterErgodic(node: node?.right, queue: &queue)
        }
        queue.enQueue(item: node?.key ?? "")
    }

demo地址:https://github.com/yangguanghei/studyDateStructure

上一篇 下一篇

猜你喜欢

热点阅读