1.存在一棵总共有2016个结点的二叉树,其中有16个结点只有一个孩子。F
叉树总共有2016个结点,满二叉树总共的结点数为2的n次方-1,n是满二叉树的层数,所以该二叉树满的情况下是2048-1=2047,而2047-2016=31,也就是说,少了31个叶子结点,题目中16个结点只有一个孩子,那就先从16个叶节点上一层的父节点分别拿一个孩子,于是还剩15个结点未处理,15个除以2有余数(那就是多的一个要么导致剩17个只有一个孩子,要么15个只有一个孩子,不可能出现16个只有一个结点的孩子) 31-16是奇数则不存在
2.有一个四叉树,度2的结点数为4,度3的结点数为2,度4的结点数为1。问该树的叶结点个数是多少?B
A.8 B.12 C.18 D.20
n=N2+N3+N4+N0=2*N2+3*N3+4*N4+1(n1题目没说,则认为是0)
解得N0=12
3.具有1102个结点的完全二叉树一定有__个叶子结点。B
A.79 B.551 C.1063 D.不确定
n=n1 + 2*n2 + 1 ,二叉树中n1为1或0
①n1=1 ,n=1102=1+1+2*n2 , n2=550,所以n0= n2 +1 =551;
②n1=0,n2不为整数,舍
4.哈夫曼树 见收藏夹
5.已知一棵完全二叉树的第9层(设根为第1层)有100个叶结点,则该完全二叉树的结点个数最多是:B A.311 B.823 C.847 D.无法确定
假设第九层铺满 考虑贪心最大化的情况,有孩子节点 = 2**(9-1)-100=256-100=156
n = 156*2 + 2**9 - 1 =823
6.对以下算法功能最准确的描述是()。
int fun1(BTreeNode *BT, ElemType e){
int n1, n2;
if (BT==NULL) return 0;
if (BT->data==e) return 1;
n1 = fun1(BT->left, e);
if (n1>=1) return n1+1;
n2 = fun1(BT->right, e);
if (n2>=1) return n2+1;
return 0;
}
A.判断二叉树根结点值是否为e B.判断二叉树是否存在值为e点 C.求二叉树中值为e结点的层次 D.求二叉树值为e的结点的个数
C,查找到值为e的结点就返回并从底层到上层每层递增1
7.用双亲存储结构表示树,其优点之一是比较方便____。
A.找指定结点的双亲结点 B.找指定结点的孩子结点
C.找指定结点的兄弟结点 D.判断某结点是不是叶子结点
双亲存储结构表示树,每个节点包含自身信息以及其父节点在数组中的位置,这样就可以方便地找到指定结点的双亲结点。同时,也可以通过遍历整个数组来查找指定结点的孩子结点和兄弟结点。但是,判断某结点是否为叶子结点需要遍历整棵树。