二叉树常见算法总结-基本二叉树
2016-08-29 16:08
471 查看
二叉树是最经典的数据结构之一,其结构类型和算法操作也是十分多,今天来做一个总结(今天先不讨论对B树,红黑树那种比较高级的数据结构)。
树结构,一般用节点引用两个子节点作为左右节点。结构代码如下
PS:有些时候也要有个指针指向父节点的,比如剑指offer那里有个题目是寻找中序遍历的时候要你寻找给出的节点在中序遍历的时候下一个节点是什么,这时候就需要了。
好了,现在先讨论一下二叉树的四种遍历算法,先序,中序,后序遍历,以及层次遍历。先序遍历就是先访问父节点,然后再访问左子树和右子树。中序就是先访问左子树,然后访问父节点,最后访问右子树。后序就是先访问左子树,和右子树,最后访问父节点。很抽象吧。先上代码,其实对着代码好好想下就很清晰了。
下面我们来看看怎么实现层次遍历的,其实层次遍历是借助一个队列去实现的,而剑指offer里面也很多题目需要我们用到层次遍历的变形。
现在我们讨论一下他们的算法复杂度,其实这个也很简单,因为每个节点都被访问了一次,所以他的时间复杂度显而易见是O(n)。(PS:这个我面试YY和网易都被问到了)
然后怎么求二叉树的高度呢,这里也给出他的实现
为什么我们总是讨论二叉树而不讨论3,4,5个节点的树呢,其实很简单。树都可以用二叉树表示的。树我们一个比较好的表示方法是父节点记录长子(第一个子节点),然后子节点之间使用引用来进行沟通。如下面代码
其实敏感的同学也看出来了,树节点的类结构和二叉树是完全一样的,这也就是为什么树可以用二叉树进行表示了
然后我们把父节点到长子的边作为左边,兄弟链表之间引用作为右边就可以转化为
现在我们就很清楚看到为什么可以把二叉树来表示各种树的原因啦!
树结构,一般用节点引用两个子节点作为左右节点。结构代码如下
PS:有些时候也要有个指针指向父节点的,比如剑指offer那里有个题目是寻找中序遍历的时候要你寻找给出的节点在中序遍历的时候下一个节点是什么,这时候就需要了。
好了,现在先讨论一下二叉树的四种遍历算法,先序,中序,后序遍历,以及层次遍历。先序遍历就是先访问父节点,然后再访问左子树和右子树。中序就是先访问左子树,然后访问父节点,最后访问右子树。后序就是先访问左子树,和右子树,最后访问父节点。很抽象吧。先上代码,其实对着代码好好想下就很清晰了。
下面我们来看看怎么实现层次遍历的,其实层次遍历是借助一个队列去实现的,而剑指offer里面也很多题目需要我们用到层次遍历的变形。
现在我们讨论一下他们的算法复杂度,其实这个也很简单,因为每个节点都被访问了一次,所以他的时间复杂度显而易见是O(n)。(PS:这个我面试YY和网易都被问到了)
然后怎么求二叉树的高度呢,这里也给出他的实现
为什么我们总是讨论二叉树而不讨论3,4,5个节点的树呢,其实很简单。树都可以用二叉树表示的。树我们一个比较好的表示方法是父节点记录长子(第一个子节点),然后子节点之间使用引用来进行沟通。如下面代码
其实敏感的同学也看出来了,树节点的类结构和二叉树是完全一样的,这也就是为什么树可以用二叉树进行表示了
然后我们把父节点到长子的边作为左边,兄弟链表之间引用作为右边就可以转化为
现在我们就很清楚看到为什么可以把二叉树来表示各种树的原因啦!
相关文章推荐
- 常见的基本算法总结(持续更新。。。)
- 二叉树常见算法总结(一)
- BiTree 二叉树 基础算法及常见题目总结
- BiTree 二叉树 基础算法及常见题目总结
- 我所总结的基本常见排序方法
- java基本算法总结
- 常见密码算法总结--(3)加密模式的openssl代码分析之cbc模式
- 各种基本算法实现小结(三)—— 树与二叉树
- JVM调优总结(三)-基本垃圾回收算法
- java基本算法总结(冒泡排序、选择排序、插入排序)
- 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
- 二叉树 遍历 算法总结(转)
- 几种常见模式识别算法整理和总结
- JVM垃圾回收机制总结(2) :基本算法概述
- JVM调优总结(三)-基本垃圾回收算法
- JVM调优总结(三)-基本垃圾回收算法
- 常见密码算法总结--(2)分组密码加密模式
- 二叉树 遍历 算法总结
- 常用算法总结之排序(二)----基本冒泡
- JVM垃圾回收机制总结(2) —基本算法概述