1.数组存储
2.树
完全二叉树的最后一个结点的编号一定是1001,则它的父结点的编号为1001/2=500,则叶子结点个数为1001-500=501.
总结一下:完全二叉树的最后一个结点的编号是n,则它的父结点的编号为[n/2],则叶子结点个数为n-[n/2]。
哈夫曼树的性质是:
- 每个非叶子结点都有两个孩子结点。
- 哈夫曼树的叶子结点个数比非叶子结点个数多一个。
设哈夫曼树中有 n
个非叶子结点,则有 n+1
个叶子结点。
根据题意,总共有 199 个结点,所以:
n + (n + 1) = 199
解得 n = 99
。
因此,该哈夫曼树中有 n + 1 = 99 + 1 = 100
个叶子结点。
在二叉中序线索树(Threaded Binary Tree)中,每个节点除了左、右孩子指针外,还多了两个线索(Thread),分别指向其在中序遍历中的前驱和后继。题目中给出了以下条件:
- 节点 X 是一个有左孩子的节点。
- 节点 X 不是根节点。
要找到节点 X 的前驱,需要结合这些条件来分析。我们分几种情况讨论:
-
X 有左孩子: 如果 X 有左孩子,那么 X 的前驱是其左子树中最右的节点。因为在中序遍历中,访问节点 X 之前会先访问它的左子树的最右节点。
-
X 没有左孩子,但有前驱线索指向前驱: 在这种情况下,直接通过线索找到 X 的前驱。
综合题目条件,节点 X 有左孩子且不是根节点。于是我们需要找到其左子树中最右的节点。
具体步骤如下:
- 从节点 X 出发,找到 X 的左孩子 L。
- 然后不断沿着 L 的右孩子指针向下移动,直到找到最右的节点(记作 P)。
- 节点 P 即为 X 的前驱。
3.图
假设至少有N个顶点。由于是非连通图,并且要满足28条边,所以N=边为28的完全图(顶点最少)的顶点数+1(与完全图不连通)。
完全图边数=28,解n(n-1)/2=28,得n=8,因此N=8+1=9.