数据结构——树(1):树的基本概念,二叉树、完全二叉树、满二叉树、搜索二叉树

来源:互联网 发布:手机淘宝我的店铺在哪 编辑:程序博客网 时间:2024/05/29 13:20

树这个数据结构用到了递归的概念:树的子树还是树;
度degree:节点的子树个数;
树的度:树中任意节点的度的最大值;
兄弟sibling:两节点的parent相同;
层layer:根在第一层,以此类推;
高度height:叶子节点的高度为1,根节点高度最高;
有序树:树中各个节点是有次序的;
森林forest:多个树组成;

树的表示方法:

1,亲表示法
2,子表示法
3,亲子表示法
4,亲子兄弟表示法

树的类型:

1,线性表是树的一种特例
2,斜树
3,二叉树——完全二叉树——满二叉树

树的存储方式:

1,顺序存储:只适用于完全二叉树——完全二叉树和数组可以一一对应互转
2,链表存储:通用的存储方式

二叉树

度不超过2的树(度全是1就是线性表):

二叉树性质

1.第i层至多有2^(i-1)个节点;
2.深度为k的二叉树最多有2^k -1个节点;
3.任意二叉树,度为0的节点数等于度为2的节点数+1;

二叉树的遍历

(1)前序遍历:先双亲、再左孩子、最后右孩子;
(2)中序遍历:先左孩子、再双亲、最后右孩子;
(3)后序遍历:先左孩子、再右孩子、最后双亲;
(4)层次遍历:一层一层,从左到右、从上到下遍历;

二叉树前序,中序,后序互求:http://blog.csdn.net/picway/article/details/72229650

扩展二叉树

对于一般二叉树的扩充,为了能够通过一个遍历序列建立二叉树,扩展二叉树如图所示:
这里写图片描述
如果存在遍历序列:AB##C##,则可以很容易的建立二叉树;
此种方式很方便,因为一般来说都需要三种遍历方式中的两种才可以确定一个二叉树;

树、森林、二叉树的转换

树转二叉树:

这里写图片描述

森林转二叉树:

这里写图片描述

二叉树转树:

这里写图片描述

二叉树转森林:

这里写图片描述

特殊二叉树

完全二叉树

完全二叉树的特点:
(1)叶子结点只能出现在最下两层。
(2)最下层的叶子一定集中在左部连续位置
(3)倒数二层,若有叶子结点,一定都在右部连续位置。
(4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
(5)同样结点数的二叉树,完全二叉树的深度最小。

(即元素是由上到下由左到右顺次排列到二叉树中的,如果元素个数是2^n-1个,则排成满二叉树)

满二叉树

满二叉树的特点有:
(1)叶子只能出现在最下一层。
(2)非叶子结点的度一定是2。
(3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

注意:满二叉树一定是棵完全二叉树,但完全二叉树不一定是满的。

二叉搜索树

二叉查找树定义:具有下列性质的二叉树称为二叉搜索树:
  1) 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  2) 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
  3) 左、右子树也分别为二叉排序树;
  4) 没有键值相等的节点。

空树也是一个二叉搜索树。

对于一个二叉搜索树,最小值在最左的叶节点上,最大值在最右的叶节点上。

二叉查找树的插入过程如下:

  1) 若当前的二叉查找树为空,则插入的元素为根节点;

  2) 若插入的元素值小于根节点值,则将元素插入到左子树中;

  3) 若插入的元素值不小于根节点值,则将元素插入到右子树中。

二叉查找树的删除,分三种情况进行处理:

  1) p为叶子节点,直接删除该节点,再修改其父节点的指针。
  2) p为单支节点(即只有左子树或右子树)。让p的子树与p的父亲节点相连,删除p即可(注意分是根节点和不是根节点);

  3) p的左子树和右子树均不空。找到左子树的最大值,或右子树的最小值,移到p的位置。

  二叉查找树的性质:对二叉查找树进行中序遍历,即可得到有序的数列。
  
  二叉查找树的时间复杂度:它和二分查找一样,插入和查找的时间复杂度均为O(logn),但是在最坏的情况下仍然会有O(n)的时间复杂度。原因在于插入和删除元素的时候,树没有保持平衡。我们追求的是在最坏的情况下仍然有较好的时间复杂度,这就是平衡查找树设计的初衷。
  二叉查找树的高度决定了二叉查找树的查找效率。
  

参考资料:
http://www.cnblogs.com/maybe2030/p/4732377.html
http://blog.csdn.net/xiazdong/article/details/7296257
http://blog.csdn.net/jnu_simba/article/details/8853822
http://dongxicheng.org/structure/trietree/
https://www.zhihu.com/question/20176446

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅族手机的微信图标找不到了怎么办 金立手机:微信图标找不到怎么办? 鞋厂装跟机老是卡钉怎么办 苹果手机摔了一下开不了机怎么办 百度网盘解析的种子保存不了怎么办 下载了种子百度网盘解析不了怎么办 正畸复诊后吃饭一直会磨嘴怎么办 遇到儿子说话对母亲不满母亲怎么办 冰箱旧了怎么办教你创新冰箱翻新法 微信陌生人加好友发红包怎么办 微信红包发了对方收不到怎么办 发红包是微信密码不知道了该怎么办 微信上红包密码不知道密码怎么办 本人不知道微信自动发红包怎么办 微信钱包里的钱没了怎么办 微信聊天删除了红包没领怎么办 微信红包未领取删掉了怎么办 微信红包没领取删掉了怎么办 微信红包没领取就删除好友了怎么办 老公一个人出去玩不愿带老婆怎么办 干了一年也攒不下钱怎么办 住院出院后请领导同事吃饭怎么办 有同事请吃饭答应了又不想去怎么办 同事请吃饭发红包不收怎么办 同事要走了请吃饭我不想去怎么办 请领导吃饭他说今晚有事我该怎么办 两个月的狗狗不吃狗粮怎么办 挖机驾驶室的小镙杆总是掉该怎么办 开挖机出了事故没有证怎么办 发现小孩有早恋现象做家长该怎么办 马上中考了初三孩子不上学怎么办 初三孩子老说自己难受不上学怎么办 幼儿园安全教案迷路了怎么办及反思 老婆发现我出轨后离家出走了怎么办 把丝袜放进马桶水箱堵了怎么办 如果老公那方面不行但人很好怎么办 老公哪里都好就是那方面不行怎么办 电饭锅盖子卡的地方掉了怎么办 唯品会退货已经收到了不退款怎么办 有人用qq冒充我和别人聊天怎么办 别人冒充我的微信名和头像怎么办