【2020年山西大学真题】二叉树存储形式为(lchild,data,rchild),给出求二叉树的最大关键字
值的算法。
(1)给出算法的基本思想;
(2)根据设计思想,给出描述算法;
(3)分析所给算法的时间复杂度.
(1)二叉树的最大关键字值可以通过递归的方式来实现。基本思想是比较根节点的关键字值和左子树、右子树的最大关键字值,然后返回最大值。
(2)以下是用C语言实现该算法的代码:
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点的结构体定义
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 递归求二叉树的最大关键字值
int findMax(TreeNode *root) {
if (root == NULL) {
return ;
}
int max = root->data;
int leftMax = findMax(root->left);
int rightMax = findMax(root->right);
if (leftMax > max) {
max = leftMax;
}
if (rightMax > max) {
max = rightMax;
}
return max;
}
int main() {
// 求二叉树的最大关键字
int max = findMax(root);
printf("二叉树的最大关键字为:%d\n", max);
return 0;
}
(3)算法的时间复杂度是 O(n),其中 n 是二叉树的节点数量。因此,该算法的时间复杂度是线性的,与二叉树的规模成正比。