一、树与图
树和图的区别:
树:除根节点外其余节点有且只有一个前驱,即父节点。
图:每个节点可能有不只一个前驱节点。
树其实就是不包含回路的连通无向图。
如下图中左边的是一颗树,而右边的是一个图。因为左边的没有回路,每个节点除节点1有且只有一个前驱节点。而右边存在1->2->5->3->1这样的回路,节点5同时有节点2和节点3这两个前驱节点。
【图和概念参考自《啊哈!算法》P180】
正是因为树的这些特点,树有着很多特性:
①一棵树中的任意两个节点有且仅有唯一的一条路径连通。
②一棵树如果有n个节点,那么它一定恰好有n-1条边。
这个特性可以由树的除根节点外其余节点有且只有一个前驱这个定义来推导。
③在一棵树中加一条边将会构成一个回路。
二、树与二叉树
树与二叉树的区别:二叉树是一种特殊的树,这种特殊在于树的节点可以有多个孩子,而二叉树的节点最多只能有两个孩子。
如图6-2-1为树,而图6-5-2才是二叉树。【摘自《大话数据结构》P151和P165】
二叉树具有五种基本形态:
①空二叉树
②只有一个根节点
③根节点只有左子树
④根节点只有右子树
⑤根节点既有左子树又有右子树
三、二叉树的性质
性质1:在二叉树的第i曾上之多有2^(i-1)个节点。
性质2:深度为k的二叉树至多有2^k-1个节点。
性质3:对任何一颗二叉树,如果叶节点数为n0,度为2的节点数为n2,则n0=n2+1.
性质4:具有n个节点的完全二叉树的深度为[log2n](向下取整)+1。
性质5:如果对一颗有n个结点的完全二叉树按顺序从1到n编号,则:
①如果i=1,则节点i是二叉树的根,无双亲;如果i>1,则其双亲是[i/2](向下取整)。
②如果2i>n,则节点i五左孩子(节点i为叶节点);否则其左节点是节点2i。
③如果2i+1>n,则节点i无右孩子;否则其右孩子为节点2i+1。