手游开发工程师面试(三) 树篇(Tree)

本文主要介绍了树的相关概念,包括二叉树、满二叉树、完全二叉树、堆、二叉搜索树、平衡二叉树(如红黑树、AVL树)以及树的遍历类型。二叉搜索树和堆常作为面试算法题,而红黑树的了解对于面试也很重要。
摘要由CSDN通过智能技术生成

树篇主要总结树的相关概念,没有具体实现分析。二叉搜索树和堆的相关算法都是面试算法题的考核范围内,建议刷刷LeetCode的题。本人面试过的一家大公司甚至会提问红黑树的实现,了解下原理和大概实现也是有备无患。
文章的图片都来自网络,感谢原作者的无私分享,如有侵权请联系本人删除。

1. 二叉树

二叉树是每个结点最多有两个子树的树结构。

2. 满二叉树

如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

3. 完全二叉树

一棵空树,或者是具有下列性质的二叉树:
(1)所有的叶结点都出现在第k层或k-1层(层次最大的两层)
(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+1。

满二叉树一定是完全二叉树。
二叉树

4. 堆(Heap)

一棵空树,或者是具有下列性质的二叉树:
(1)任意节点的值总是不大于或不小于其父节点的值;
(2)属于一棵完全二叉树。

将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
堆

5. 二叉搜索树(Binary Search Tree, BST)

一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉搜索树。

二叉搜索树的中序遍历的结果是升序的。
二叉搜索树

6. 平衡二叉树(Balanced Binary Tree)

一棵空树,或者是具有下列性质的二叉树:
(1)左右两个子树的高度差的绝对值不超过1;
(2)左、右子树也分别为平衡二叉树。

最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树、SBT等。

7. 红黑树(R-B Tree)

一棵空树,或者是具有下列性质的二叉搜索树:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。
(4)每个红色结点的两个子结点一定都是黑色。
(5)任意一结点到每个叶子结点的路径都包含数量相同的黑结点。

特点:高度为logN和2logN之间;遍历平均时间复杂度0(N),查找、插入、删除平均时间复杂度O(logN)。
对比AVL树:AVL树是高度平衡的(高度为logN),红黑树是近似平衡的(高度为logN和2logN之间),对于频繁插入/删除的操作红黑树的维护成本低。
红黑树

8. AVL树

AVL树是一种高度平衡的平衡二叉树,树中的任意节点的左右子树的高度之差不超过1。

9. 树的遍历类型

先序遍历:先访问根节点,再访问左子树,最后访问右子树。
中序遍历:先左子树,再根节点,最后右子树。
后序遍历:先左子树,再右子树,最后根节点。


数据结构相关的链接:
手游开发工程师面试(一) 字典篇(Dictionary
手游开发工程师面试(二) 队列和栈篇(Queue & Stack)

长路漫漫,上下求索

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值