#include<bits/stdc++.h>
#define INF 0x3f3f3f3f3f3f3f3f
#define mod 1000000007
#define IOS ios::sync_with_stdio(false)
#define endl '\n'
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
typedef struct node {
int data;
struct node* left, * right;
}Node;
typedef struct {
node* root;
}Tree;
int get_height(Node* node) {//求层数
if (node == NULL)return 0;//如果树为空 返回0
else {
int left_h = get_height(node->left);//查找左子树的深度
int right_h = get_height(node->right);//查找右子树的深度
int maxn = max(left_h, right_h);//取最大值
return maxn + 1;//答案为左右子树层数最大值加根节点
}
}
int get_maximum(Node* node) {//一般树求最大值(若为二叉搜索树,则只需递归搜索右子树)
if (node == NULL)return -1;//如果树为空 返回-1
else {
int left_max = get_maximum(node->left);//查找左子树最大值
int right_max = get_maximum(node->right);//查找右子树最大值
int now = node->data;//根节点值
int maxn = max(now, max(left_max, right_max));//求三者的最大值
return maxn;
}
}
void insert(Tree * tree, int val) {
Node* node = new Node;//申请内存
node->data = val;//建立一个独立节点并初始化
node->left = NULL;
node->right = NULL;
if (tree->root == NULL) {//如果树为空 则该节点为树根
tree->root = node;
}
else {
Node* temp = tree->root;//临时变量代表树的根
while (temp != NULL) {//节点不为空则往下搜索
if (val < temp->data) {//如果要插入的节点数据比当前节点小
if (temp->left == NULL) {//查找它的左子树
temp->left = node;//若为空则把待插入节点放在此位置
return;
}
else temp = temp->left;//否则继续向左搜索
}
else {//如果要插入的节点数据比当前节点大
if (temp->right == NULL) {//查找它的右子树
temp->right = node;//若为空则把待插入节点放在此位置
return;
}
else temp = temp->right;//否则继续向右搜索
}
}
}
}
int main() {
int arr[7] = { 6,3,8,2,5,1,7 };
Tree tree;//初始化一棵树
tree.root = NULL;//不要忘记将树根初始话为NULL
for (int i = 0;i < 7;++i) {
insert(&tree, arr[i]);
}
cout << get_height(tree.root) << endl;
cout << get_maximum(tree.root) << endl;
return 0;
}
层数
4
最大值
8