美文网首页
100天iOS数据结构与算法实战 Day14 - Binary

100天iOS数据结构与算法实战 Day14 - Binary

作者: 人魔七七 | 来源:发表于2019-04-25 17:59 被阅读0次

    二叉树的周游算法

    • 前序遍历:visit(node),preorder(left Subtree), preorder(right Subtree)。
    • 中序遍历:in-order(left Subtree),visit(node),in-order(right Subtree)。
    • 后序遍历:post-order(left Subtree),post-order(right Subtree),visit(node)。
    • 层级遍历:一层层访问每个节点。

    通过上述四种方式遍历二叉树的每个节点。

    练习周游算法的技巧 1

    周游算法练习1

    思路:一般我们习惯 ,根节点-左节点-右节点,这样的模型,我们就把例如上图A的左子树当做一个块,类似一个大节点用括号圈起来,同样的右子树也这样做。然后每个块里做前中后遍历。

    • 前序遍历。A,(B,D,E),(C,F,G)。得到结果是 A,B,D,E,C,F,G 。

    • 中序遍历。(D,B,E),A,(F,C,G)。得到的结果是 D,B,E,A,F,C,G 。

    • 后序遍历。(D,E,B),(F,G,C),A。得到的结果是 D,E,B,F,G,C,A 。

    • 层级遍历。 A,B,C,D,E,F,G 。

    练习周游算法的技巧 2

    周游算法练习2

    前序遍历思路:每个节点从左边画线一直到底部这个线,然后按照从左到右的顺序读取节点。
    结果是:A,B,D,E,C,F,G 。

    周游算法练习3

    中序遍历思路:每个节点从中间画线到底部这个线,然后按照从左到右的顺序读取节点。
    结果是 D,B,E,A,F,C,G 。

    周游算法练习4

    后序遍历思路:每个节点从右边画线到底部这条线,然后从左到右的顺序读取节点。
    结果是 D,E,B,F,G,C,A 。

    练习周游算法的技巧 3

    周游算法练习5

    前序遍历思路:从每个节点左边画出一个线,然后从根结点开始转一圈,经过每个节点和树的分支,包裹这个树。经过这些短线的顺序就是结果。A,B,D,E,C,F,G 。

    周游算法练习6

    中序遍历思路:从每个节点底部边画出一个线,然后从根结点开始转一圈,经过每个节点和树的分支,包裹这个树。经过这些短线的顺序就是结果。D,B,E,A,F,C,G 。

    周游算法练习7

    后序遍历思路:从每个节点右边画出一个线,然后从根结点开始转一圈,经过每个节点和树的分支,包裹这个树。经过这些短线的顺序就是结果。D,E,B,F,G,C,A 。

    延伸

    • 前序遍历,中序遍历,后续遍历的思想是按照深度优先的顺序遍历的。层级遍历的思想是按照广度优先的顺序遍历的。
    • 由于要遍历树的每个节点因此时间复杂度是O(n)。
    • 广度优先遍历思想的层级遍历需要的额外的空间是O(w),w是这个二叉树的最大的宽,比如Perfect Binary Tree这种情况下最大节点在最后一层,第i层至多拥有2i-1个节点,因此需要额外空间O(Ceil(n/2));深度优先遍历思想的其他三种方式需要额外空间是O(h),这个h是二叉树的最大高度,比如一个平衡树h是Log2(n) ,但是对于极不平衡的左倾斜或者右倾斜树来说h就是n 。所以在最坏的情况下,两者所需的额外空间是O(n)。但最坏的情况发生在不同类型的树木上,因此针对不同种类不同性质的树需要的额外空间有不尽相同。从以上可以明显看出,当树更平衡时,广度优先遍历思想的层级遍历所需的额外空间可能更多,并且当树不太平衡时,深度优先遍历思想的其他三种遍历方式的额外空间可能更多。

    Github

    https://github.com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm

    相关文章

      网友评论

          本文标题:100天iOS数据结构与算法实战 Day14 - Binary

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