NCRE Java Examination
Chapter 1 数据结构与算法
二叉树
满二叉树:是除了叶子结点外所有结点度数都为2的二叉树,当其有n个结点时,非叶子结点数为int(n/2)。
eg. 设一个棵满二叉树共有15个结点,则该满二叉树的叶子结点数为。
∼
L
e
a
f
N
o
d
e
s
=
i
n
t
(
n
/
2
)
=
i
n
t
n
2
\sim Leaf\ Nodes=\rm{int}(n/2)=\rm{int}{{n}\over{2}}
∼Leaf Nodes=int(n/2)=int2n
∼
L
e
a
f
N
o
d
e
s
=
i
n
t
(
n
/
2
)
=
i
n
t
n
2
=
i
n
t
(
15
/
2
)
=
7
\sim Leaf\ Nodes=\rm{int}(n/2)=\rm{int}{{n}\over{2}}=\rm{int}(15/2)=7
∼Leaf Nodes=int(n/2)=int2n=int(15/2)=7
T
o
t
a
l
=
15
−
∼
L
e
a
f
N
o
d
e
s
=
15
−
7
=
8
Total=15-\sim Leaf\ Nodes=15-7=8
Total=15−∼Leaf Nodes=15−7=8
###二叉树基本性质3: 对任意一棵二叉树,度为0的叶子节点总是比度为2的结点多一个。
####eg.在一棵二叉树中,叶子结点共有30个,度为1的结点共有40个,则该二叉树中的总结点数共有多少个。
度
为
2
=
度
为
0
−
1
=
30
−
1
=
29
{度为2}={度为0}-1=30-1=29
度为2=度为0−1=30−1=29
T
o
t
a
l
=
30
+
29
+
40
=
99
Total=30+29+40=99
Total=30+29+40=99
###已知深度求叶子结点。
设:深度为k。
L
e
a
f
N
o
d
e
s
=
2
k
−
1
Leaf\ Nodes=2^{k}-1
Leaf Nodes=2k−1
###二叉树的前序遍历(DLR):在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树,并且在遍历右子树时,上述规则同样适用,即“根-左-y”右。
###二叉树的中序遍历(LDR):访问根节点再访问左子树和右之间。
###后序遍历(LRD):访问左右子树之后再访问根结点。
###对长度为n的有序链表进行对分查找,最坏的情况下需要的比较次数为log2n
###二分法也称折半查找,用顺序存储的线性有序表适用二分查找。
###冒泡、简单选择排序、直接插入排序在最坏的情况下比较次数都是
0
(
n
2
)
0(n^{2})
0(n2),而堆排序的时间复杂度为
0
(
n
log
2
n
)
0(n\log_{2n})
0(nlog2n),这也是堆排序的最大优点。
###简单选择排序的算法描述:前面的元素已经有序,扫描剩下的线性表,找到最小的元素,将它交换到剩余表的最前面,直到剩余表为空。
###堆排序是一种选择排序的算法,从它建堆开始,1.将序列表表示为完全二叉树 2.从第n/2个结点开始(最后一个结点的父亲)。如果该结点的孩子小与该结点,则将两个结点交换,交换后,如果该结点的子结点破坏了堆的条件,则递归交换。确保该结点的最后值都小于它的左右孩子 3.n-1 4.重复2、3步骤,直到最小值到大定点结点,并且满足堆的性质。
###冒泡排序在最坏的情况下比较次数为,
n
(
n
−
1
)
/
2
n(n-1)/2
n(n−1)/2
###希尔排序,
n
1.5
n^{1.5}
n1.5
##程序设计基础
###面向对象基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好