pta上的这几道关于二叉树的题该怎样做

1.对以下算法功能最准确的描述是()。

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的结点的个数
2. 对任意给定的含 n (n>2) 个字符的有限集 S,用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树 T1 和 T2。 下列叙述中,正确的是:

A.T1 与 T2 的结点数相同
B.T1 的高度大于 T2 的高度
C.出现频次不同的字符在 T1 中处于不同的层
D.出现频次不同的字符在 T2 中处于相同的层

  1. 首先将 28, 23, 54, 61, 98, 37 插入一棵初始为空的平衡二叉树(AVL树),然后马上插入下列选项中的一个键值。哪个键值将引起 RL 旋转?

A.10
B.50
C.80
D.100

纠正下,第二题选D,因为固定编码,所用的码位数都一样,所以都在最后一层

(1)C
因为有n1+1和n2+1,所以不可能是判断根节点和是否存在,排除AB(当然可以实现判断是否存在的目的,但是C更精确一些),因为左节点统计完后直接return了,所以不可能是统计数量,所以排除D。
(2)C
哈夫曼编码对不同频次的字符编码长度不一样,所以出现频次不同的字符在 哈夫曼编码中处于不同的层
(3)B
这个可以看一下下面的文章

平衡二叉树(AVL)的插入与调整_大草莓的巴斯光年的博客-CSDN博客_平衡二叉树插入 平衡二叉树(AVL)的插入与调整平衡二叉树:定义:一种特殊的二叉查找树,树上任一结点的左子树和右子树的深度之差不超过1(平衡因子:左右子树深度之差,只要有仁义结点的平衡因子绝对值大于1,就不是平衡二叉树)。平衡二叉树的插入在一个平衡二叉树中插入一个结点时,又可能会出现失衡,即出现平衡因子绝对值大于1的结点,如:2,-2.比如下面这个例子:接下来就必须要重新调整树的结构,恢复平衡。每次调整的对象称为最小不平衡树。平衡调整的四种类型4中类型如下图:平衡调整之前学习的大部分方法都是左旋调整 https://blog.csdn.net/Sep21m_wyy/article/details/119620342?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119620342-blog-125869212.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119620342-blog-125869212.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

平衡二叉树的旋转_冰岛少年的博客-CSDN博客_平衡二叉树的旋转 平衡二叉树的旋转都是发生在最小不平衡子树上的,先看一下最简单的最小不平衡子树的形态:其中结点C的插入导致了平衡树出现了不平衡,那怎么解决更好呢,我有一个想法,那就是把这3个结点中的中位数提到根结点。那我们先来找到中位数,因为平衡二叉树是一颗排序树,对于这4种形态的树,中位数都在固定的位置:那么我们现在来利用简化版的左旋右旋操作将中位数提到根节点:通过这里可以大致明白旋转的操作的意义了:左旋B:即将父亲结点A当做自己的左孩子右旋B:即将父亲结点A当做自己的右孩子下面看一下复杂一点的最小 https://blog.csdn.net/weixin_43710268/article/details/121016371