美文网首页
swift: 层序遍历翻转二叉树和快速排序

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

作者: 小小小蚍蜉 | 来源:发表于2021-04-16 12:07 被阅读0次

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<TreeNode>()

    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<Int>, 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: 层序遍历翻转二叉树和快速排序

    Talking is cheap, show the codes. 层序遍历进行翻转二叉树 快速排序

  • 数据结构与算法之二叉树遍历(七)

    目录 前序遍历中序遍历后序遍历层序遍历遍历方式的选择条件根据遍历结果重构二叉树翻转二叉树计算二叉树的高度判断一棵树...

  • 面试题

    面试题 二叉树 非递归实现二叉树遍历 节点: 前序遍历 中序遍历 后序遍历 排序 快速排序 其他问题 算法题 给一...

  • Binary Tree - Swift 相关实现

    原文参考 节点 翻转二叉树 前序遍历 中序遍历 后序遍历 层次遍历/广度优先遍历 深度优先遍历 判断二叉排序树

  • 二叉树

    二叉树 高度 深度真二叉树 满二叉树 完全二叉树 二叉树遍历前序 中序 后序层序遍历 翻转二叉树 递归法...

  • 阿里达摩院常见算法题

    一、二叉树中序遍历 二、二叉树层序遍历 广度优先 三、翻转二叉树 四、反转链表 五、岛屿数量 我们可以将二维网格看...

  • 排序-二叉树

    二叉树的排序可以分为中序排序 左 中 右前序排序 中 左 右后序排序 左 右 中 中序排序能够快速遍历出...

  • 二叉树遍历-JAVA实现

    基础二叉树 二叉树遍历分为前序、中序、后序递归和非递归遍历、还有层序遍历。 前序递归遍历算法:访问根结点-->递归...

  • *【二叉树】226.翻转二叉树

    题目 翻转一棵二叉树。 示例: 思路 递归先把左右子树各自都翻转了,再将左右子树互换位置。 迭代层序遍历思路。

  • LeetCode-102-二叉树的层序遍历

    LeetCode-102-二叉树的层序遍历 102. 二叉树的层序遍历[https://leetcode-cn.c...

网友评论

      本文标题:swift: 层序遍历翻转二叉树和快速排序

      本文链接:https://www.haomeiwen.com/subject/mdcelltx.html