一、树的结构表示
1.1. 双亲表示法
除去根节点,树中每个节点都有且仅有一个双亲节点:
该表示法在寻找父节点时:O(n) = 1;子节点时:O(n) = n;兄弟节点时:O(n) = n。
1.2. 孩纸表示法
除去叶节点,树中每个节点都有孩纸,且孩纸中总是最少有一个老大,老大有小弟时,总有一个和他最相近的,小弟也有小弟...
该表示法在寻找父节点时:O(n) =n;子节点时:O(n) =1;兄弟节点时:O(n) =1。
1.3. 兄弟表示法
对于任意一个节点,他有儿子的话,那就只有一个大儿子,他有弟弟的话,就只有一个大弟弟。
这种方法将普通的树转化为一棵二叉树。
该表示法在寻找父节点时:O(n) =n ;子节点时:O(n) =1 ;兄弟节点时:O(n) =1。
上述三种方法都可以添加其他新指针域来减少时间复杂度。
二、二叉树(Binary Tree)
2.1. 定义
二叉树是有最多两个子树构成,并且严格区分左子树和右子树。
2.2. 特殊二叉树
斜树、满二叉树、完全二叉树。
2.3. 性质
2.3.1. 在二叉树的第i层上最多有2^(i-1)个节点(i >= 1)
2.3.2. 深度为k的二叉树最多有2^k -1 个节点(k >= 1)
2.3.3. 对于一颗二叉树,如果其叶子节点数为n,度为2的节点数为m,则n = m + 1(度:表示该节点子节点个数)
2.3.4. 略略略.
2.3.5. 存储结构
2.4. 线索二叉树
对于一个二叉树而言,必然会存在有些节点没有左子树或者右子树,而这些节点的数据结构中却仍然占据了存储空间,如何把这些闲置的存储空间利用起来就是线索二叉树所解决的问题。
线索二叉树将指向null的左子树指向该节点的前驱,指向null的右子树指向该节点的后继。
同时添加两个0 1 标志位,当标志位为0时,该节点指向其子树,否则指向其前驱或后继。
定义:指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树就为线索二叉树(Threaded Binary Tree)。