关闭

二叉树常见算法总结-基本二叉树

553人阅读 评论(0) 收藏 举报
分类:

二叉树是最经典的数据结构之一,其结构类型和算法操作也是十分多,今天来做一个总结(今天先不讨论对B树,红黑树那种比较高级的数据结构)。
树结构,一般用节点引用两个子节点作为左右节点。结构代码如下
这里写图片描述
PS:有些时候也要有个指针指向父节点的,比如剑指offer那里有个题目是寻找中序遍历的时候要你寻找给出的节点在中序遍历的时候下一个节点是什么,这时候就需要了。
好了,现在先讨论一下二叉树的四种遍历算法,先序,中序,后序遍历,以及层次遍历。先序遍历就是先访问父节点,然后再访问左子树和右子树。中序就是先访问左子树,然后访问父节点,最后访问右子树。后序就是先访问左子树,和右子树,最后访问父节点。很抽象吧。先上代码,其实对着代码好好想下就很清晰了。
这里写图片描述这里写图片描述
这里写图片描述
下面我们来看看怎么实现层次遍历的,其实层次遍历是借助一个队列去实现的,而剑指offer里面也很多题目需要我们用到层次遍历的变形。
这里写图片描述
现在我们讨论一下他们的算法复杂度,其实这个也很简单,因为每个节点都被访问了一次,所以他的时间复杂度显而易见是O(n)。(PS:这个我面试YY和网易都被问到了)
然后怎么求二叉树的高度呢,这里也给出他的实现
这里写图片描述
为什么我们总是讨论二叉树而不讨论3,4,5个节点的树呢,其实很简单。树都可以用二叉树表示的。树我们一个比较好的表示方法是父节点记录长子(第一个子节点),然后子节点之间使用引用来进行沟通。如下面代码这里写图片描述
其实敏感的同学也看出来了,树节点的类结构和二叉树是完全一样的,这也就是为什么树可以用二叉树进行表示了这里写图片描述
然后我们把父节点到长子的边作为左边,兄弟链表之间引用作为右边就可以转化为这里写图片描述
现在我们就很清楚看到为什么可以把二叉树来表示各种树的原因啦!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12246次
    • 积分:311
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:8篇
    • 译文:0篇
    • 评论:6条
    最新评论