博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于树及其各种操作
阅读量:7227 次
发布时间:2019-06-29

本文共 1533 字,大约阅读时间需要 5 分钟。

对树的知识进行整理,图片来自COMP20003。


 

首先树(tree)并不一定都是二叉树(binary tree),这里主讲二叉树。

二叉树:

二叉树:即1个节点(node)至多有2个子节点(child node)。

遍历(traversal):

  分3种:前序遍历(Pre-order traversal)、中序遍历(In-order traversal)、后序遍历(Post-order traversal)。

前序遍历(Pre-order traversal):拷贝树

顺序为中左右。

中序遍历(In-order traversal):按序输出

顺序为左中右。

predecessor:在中序排列中一个节点的前一个节点,称为该节点的predecessor,从二叉树图上可以看出是一个节点左子树中最右边的节点。

successor:在中序排列中一个节点的后一个节点,称为该节点的successor,从二叉树图上可以看出是一个节点右子树中最左边的节点。

后序遍历(Post-order traversal):删除(free)树

  顺序为左右中。

实现:使用递归(recursion)


 

完全二叉树(complete binary tree):除了最下层,其余层的节点都有2个节点,而最下层的节点只能在最左边的二叉树。

完全二叉树的特性:

n个节点的完全二叉树,它的深度(depth)或高度(height)大约(approximately)log2n,注意:height和depth均是从0开始计数的。


二叉搜索树(binary search tree):一个节点的值比它左边连结的子节点们的值都大(或等于),比它右边连接的子节点们都小(或等于)的二叉树,最差情况是插入的值是已经按顺序排好的,此时树变成了stick,实际上成了链表。

AVL树(名字来源于发明者的首字母):每个节点的左右子树的高度(height)差的绝对值<=1的二叉树,当高度差>1时,则要进行旋转(rotation)操作保持平衡(keep balanced,即所有左右子树的高度差的绝对值<=1)

保持平衡(keep balanced):

  在每个节点边上写上高度差,从下往上看,从首先看到绝对值大于1的节点进行操作,分为两种情况:

Single Rotation(符号相同)

LL:Right Rotation

RR:Left Rotation

Double Rotation(符号不同):

RL:先Right Rotation,再Left Rotation

LR:先Left Rotation,再Right Rotation

 

树的旋转(Rotation):

  分为左旋钻(Left Rotation),右旋转(Rigth Rotation)。

 节点删除(deletion from bst):

     共2步:1.找到该节点。2.删除该节点。如何找很简单,但找到后删除还要将该节点的叶子接上去(如果有)。删除节点分为3中情况:

      1:该节点是叶子节点(无child),直接删除。

      2:该节点仅有一个child(左或右),用该child替代。

      3:该节点有2个children。

        3a:其中一个children没有child,用该节点替代。

        

        3b: 2个children都有child,用中序排列中目标节点的前一个(predecessor)或后一个(successor)替代。

 

    

  

 

 

转载于:https://www.cnblogs.com/Will-zyq/p/10052772.html

你可能感兴趣的文章
了解webpack-4.0版本(一)
查看>>
如何培养良好的编程风格
查看>>
Netty Channel源码分析
查看>>
基于 HTML5 WebGL 的 3D 机房
查看>>
Java编程——数据库两大神器:索引和锁
查看>>
springMvc学习笔记(2)
查看>>
吐槽Javascript系列二:数组中的splice和slice方法
查看>>
什么是Javascript函数节流?
查看>>
MQ框架的比较
查看>>
oschina
查看>>
Octave 入门
查看>>
深度学习入门:10门免费线上课程推荐
查看>>
React组件设计模式(一)
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>
express + mock 让前后台并行开发
查看>>
30天自制操作系统-2
查看>>
小程序开发之路(一)
查看>>
Odoo domain写法及运用
查看>>
JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
查看>>
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>