算法每一题,成长每一天~
C0E23 计算三叉搜索树的高度
真题链接:【持续更新】2024华为 OD 机试E卷 机考真题库清单(全真题库)
思路
Java
import java.util.Scanner;
public class C0E23 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
Node root = new Node(arr[0]);
for (int i = 1; i < n; i++) {
root.down(arr[i]);
}
System.out.println(root.height());
}
/**
* 三叉树
*/
public static class Node {
public int val;
public Node left;
public Node middle;
public Node right;
public Node(int val) {
this.val = val;
}
/**
* 插入规则
* @param x
*/
public void down(int x) {
if (x < val - 500) {
if (left == null) {
left = new Node(x);
} else {
left.down(x);
}
} else if (x > val + 500) {
if (right == null) {
right = new Node(x);
} else {
right.down(x);
}
} else {
if (middle == null) {
middle = new Node(x);
} else {
middle.down(x);
}
}
}
/**
* 求高度
* @return
*/
public int height() {
// 子树高度
int leftHeight = left == null ? 0 : left.height();
int middleHeight = middle == null ? 0 : middle.height();
int rightHeight = right == null ? 0 : right.height();
// 当前节点高度 = 1 + 子树的最大高度
return 1 + Math.max(leftHeight, Math.max(middleHeight, rightHeight));
}
}
}
总结
1、封装对象,利用对象的父子关系去递归。
算法要多练多练多练!!