swift: 层序遍历翻转二叉树和快速排序

Talking is cheap, show the codes.

层序遍历进行翻转二叉树

swift code

class TreeNode {

    var left: TreeNode?

    var right: TreeNode?

    var element: Int?

}

func invertBinaryTree(tempNode: TreeNode?) -> TreeNode? {

    guard let node = tempNode else {
        return tempNode
    }

    var queue = Array()

    queue.append(node)

    while (queue.count > 0) {

        guard let node = queue.popLast() else { //本次可强制解包 因为queue.count > 0 已经保证数组一定一定有值,且整个过程不存在异步删除元素
            break
        }

        let temp = node.left

        node.left = node.right
        node.right = temp

        if let leftNode = node.left {
            queue.append(leftNode)
        }

        if let rightNode = node.right {
            queue.append(rightNode)
        }
    }

    return node    
}

快速排序

func quickSort(baseTo tempArr: inout Array, maxLenth: Int, begin : Int, end: Int) {

    var i: Int
    var j: Int
    
    if begin < end {
        
        i = begin + 1
        j = end
        
        //本次while循环,目的是确保 中间位置 左边的元素 一定小于 右边的元素
        while i < j {
            
            if tempArr[i] > tempArr[begin] { //i位置的元素大于基准值,进行以下交换
                        
                //此次交换 确保了当前j的值一定大于选定的设定值,且一定在基准值 (选定的某个元素一般选定初始值)的右侧
                let temp = tempArr[i]
                tempArr[i] = tempArr[j]
                tempArr[j] = temp
                
                //已经确保了j位置的值大于基准值,所以下一步还进行arr【i】和j-1位置元素的值比较
                j -= 1
                
                
            } else { //否则,就是i位置的元素小于基准值,对i元素进行+1操作
                
                i += 1
                
            }
                                    
        }
        
        //为了防止i位置的值以及i前面的几个值和 基准值 都相等,所以要找到小于基准值的最大位置,然后进行于基准值的交换
        while (tempArr[i] >= tempArr[begin]) {
            
            i -= 1;
        }
        //然后进行于基准值的交换
        tempArr.swapAt(i, begin)
        
        
        //此时,数组可以分成给两个部分 【 小于 基准值的元素集合 】【大于 基准值的 集合】
        
        //【 小于 基准值的元素集合 】递归进行上述的比较操作
        quickSort(baseTo: &tempArr, maxLenth: maxLenth, begin: begin, end: i)
        
        //【大于 基准值的 集合】递归进行上述的比较操作
        quickSort(baseTo: &tempArr, maxLenth: maxLenth, begin: j, end: end)
        
    }
    
}


你可能感兴趣的:(swift: 层序遍历翻转二叉树和快速排序)