二叉树

二叉树

树也是基于结点的数据结构,但树里面的每个结点,可以含有多个链分别指向其他多个结点。

 

 

 

 

 

 

 

谈论树的时候,我们会用到以下术语。
•最上面的那一结点(此例中的“j”)被称为根。是的,图中的根位于树的顶端,请自行意会。
•此例中,“j”是“m”和“b”的父结点,反过来,“m”和“b”是“j”的子结点。“m”又是“q”和“z”的父结点,“q”和“z”是“m”的子结点。
•树可以分层。此例中的树有3层。

基于树的数据结构有很多种,但本章只关注其中一种,二叉树。
二叉树是一种遵守以下规则的树。
•每个结点的子结点数量可为0、1、2。
•如果有两个子结点,则其中一个子结点的值必须小于父结点,另一个子结点的值必须大于父结点。

以下是一个二叉树的例子,其中结点的值是数字。

注意,小于父结点的子结点用左箭头来表示,大于父结点的子结点则用右箭头来表示。

查找

二叉树的查找算法先从根结点开始。
(1)检视该结点的值。
(2)如果正是所要找的值,太好了!
(3)如果要找的值小于当前结点的值,则在该结点的左子树查找。
(4)如果要找的值大于当前结点的值,则在该结点的右子树查找。
二叉树查找的时间复杂度是O(logN)

插入

有序数组查找需要O(logN),插入需要O(N),而二叉树都是只要O(logN)。当你估计应用会发生许多数据改动时,这一比较将有助你做出正确选择。

删除

删除操作遵循以下规则。
•如果要删除的结点没有子结点,那直接删掉它就好。
•如果要删除的结点有一个子结点,那删掉它之后,还要将子结点填到被删除结点的位置上。
•如果要删除的结点有两个子结点,则将该结点替换成其后继结点。一个结点的后继结点,就是所有比被删除结点大的子结点中,最小的那个。
•如果后继结点带有右子结点,则在后继结点填补被删除结点以后,用此右子结点替代后继结点的父节点的左子结点。
O(logN)

 

参考:数据结构与算法图解.12.1

  我的第一本算法书 1-8 二叉查找树

 

posted @ 2020-01-07 17:59  草木物语  阅读(218)  评论(0编辑  收藏  举报