mirror of
https://github.com/krahets/hello-algo.git
synced 2025-12-16 03:59:18 +08:00
zig : upgrade codes && rust : add codes for chapter_searching and chapter_dynamic_programming. (#591)
* zig : update zig codes * rust : add codes for linear_search and hashing_search * rust : add codes for linear_search and hashing_search * rust : add codes for chapter_dynamic_programming
This commit is contained in:
4
codes/zig/.gitignore
vendored
4
codes/zig/.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
zig-cache/
|
||||
zig-out/
|
||||
zig-out/
|
||||
zig-cache/
|
||||
@@ -4,244 +4,145 @@
|
||||
|
||||
const std = @import("std");
|
||||
|
||||
// Zig Version: 0.11.0-dev.3379+629f0d23b
|
||||
// Build Command: zig build
|
||||
// Zig Version: 0.11.0-dev.3944+2e424e019
|
||||
// Zig Build Command: zig build -Doptimize=ReleaseFast
|
||||
// Zig Run Command: zig build run_* -Doptimize=ReleaseFast
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
|
||||
const group_name_path = .{
|
||||
// Source File: "chapter_computational_complexity/time_complexity.zig"
|
||||
// Run Command: zig build run_time_complexity
|
||||
.{
|
||||
.name = "time_complexity",
|
||||
.path = "chapter_computational_complexity/time_complexity.zig"
|
||||
},
|
||||
// Run Command: zig build run_time_complexity -Doptimize=ReleaseFast
|
||||
.{ .name = "time_complexity", .path = "chapter_computational_complexity/time_complexity.zig" },
|
||||
|
||||
// Source File: "chapter_computational_complexity/worst_best_time_complexity.zig"
|
||||
// Run Command: zig build run_worst_best_time_complexity
|
||||
.{
|
||||
.name = "worst_best_time_complexity",
|
||||
.path = "chapter_computational_complexity/worst_best_time_complexity.zig"
|
||||
},
|
||||
// Run Command: zig build run_worst_best_time_complexity -Doptimize=ReleaseFast
|
||||
.{ .name = "worst_best_time_complexity", .path = "chapter_computational_complexity/worst_best_time_complexity.zig" },
|
||||
|
||||
// Source File: "chapter_computational_complexity/space_complexity.zig"
|
||||
// Run Command: zig build run_space_complexity
|
||||
.{
|
||||
.name = "space_complexity",
|
||||
.path = "chapter_computational_complexity/space_complexity.zig"
|
||||
},
|
||||
// Run Command: zig build run_space_complexity -Doptimize=ReleaseFast
|
||||
.{ .name = "space_complexity", .path = "chapter_computational_complexity/space_complexity.zig" },
|
||||
|
||||
// Source File: "chapter_array_and_linkedlist/array.zig"
|
||||
// Run Command: zig build run_array
|
||||
.{
|
||||
.name = "array",
|
||||
.path = "chapter_array_and_linkedlist/array.zig"
|
||||
},
|
||||
// Run Command: zig build run_array -Doptimize=ReleaseFast
|
||||
.{ .name = "array", .path = "chapter_array_and_linkedlist/array.zig" },
|
||||
|
||||
// Source File: "chapter_array_and_linkedlist/linked_list.zig"
|
||||
// Run Command: zig build run_linked_list
|
||||
.{
|
||||
.name = "linked_list",
|
||||
.path = "chapter_array_and_linkedlist/linked_list.zig"
|
||||
},
|
||||
// Run Command: zig build run_linked_list -Doptimize=ReleaseFast
|
||||
.{ .name = "linked_list", .path = "chapter_array_and_linkedlist/linked_list.zig" },
|
||||
|
||||
// Source File: "chapter_array_and_linkedlist/list.zig"
|
||||
// Run Command: zig build run_list
|
||||
.{
|
||||
.name = "list",
|
||||
.path = "chapter_array_and_linkedlist/list.zig"
|
||||
},
|
||||
// Run Command: zig build run_list -Doptimize=ReleaseFast
|
||||
.{ .name = "list", .path = "chapter_array_and_linkedlist/list.zig" },
|
||||
|
||||
// Source File: "chapter_array_and_linkedlist/my_list.zig"
|
||||
// Run Command: zig build run_my_list
|
||||
.{
|
||||
.name = "my_list",
|
||||
.path = "chapter_array_and_linkedlist/my_list.zig"
|
||||
},
|
||||
// Run Command: zig build run_my_list -Doptimize=ReleaseFast
|
||||
.{ .name = "my_list", .path = "chapter_array_and_linkedlist/my_list.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/stack.zig"
|
||||
// Run Command: zig build run_stack
|
||||
.{
|
||||
.name = "stack",
|
||||
.path = "chapter_stack_and_queue/stack.zig"
|
||||
},
|
||||
// Run Command: zig build run_stack -Doptimize=ReleaseFast
|
||||
.{ .name = "stack", .path = "chapter_stack_and_queue/stack.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/linkedlist_stack.zig"
|
||||
// Run Command: zig build run_linkedlist_stack
|
||||
.{
|
||||
.name = "linkedlist_stack",
|
||||
.path = "chapter_stack_and_queue/linkedlist_stack.zig"
|
||||
},
|
||||
// Run Command: zig build run_linkedlist_stack -Doptimize=ReleaseFast
|
||||
.{ .name = "linkedlist_stack", .path = "chapter_stack_and_queue/linkedlist_stack.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/array_stack.zig"
|
||||
// Run Command: zig build run_array_stack
|
||||
.{
|
||||
.name = "array_stack",
|
||||
.path = "chapter_stack_and_queue/array_stack.zig"
|
||||
},
|
||||
// Run Command: zig build run_array_stack -Doptimize=ReleaseFast
|
||||
.{ .name = "array_stack", .path = "chapter_stack_and_queue/array_stack.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/queue.zig"
|
||||
// Run Command: zig build run_queue
|
||||
.{
|
||||
.name = "queue",
|
||||
.path = "chapter_stack_and_queue/queue.zig"
|
||||
},
|
||||
// Run Command: zig build run_queue -Doptimize=ReleaseFast
|
||||
.{ .name = "queue", .path = "chapter_stack_and_queue/queue.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/array_queue.zig"
|
||||
// Run Command: zig build run_array_queue
|
||||
.{
|
||||
.name = "array_queue",
|
||||
.path = "chapter_stack_and_queue/array_queue.zig"
|
||||
},
|
||||
// Run Command: zig build run_array_queue -Doptimize=ReleaseFast
|
||||
.{ .name = "array_queue", .path = "chapter_stack_and_queue/array_queue.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/linkedlist_queue.zig"
|
||||
// Run Command: zig build run_linkedlist_queue
|
||||
.{
|
||||
.name = "linkedlist_queue",
|
||||
.path = "chapter_stack_and_queue/linkedlist_queue.zig"
|
||||
},
|
||||
// Run Command: zig build run_linkedlist_queue -Doptimize=ReleaseFast
|
||||
.{ .name = "linkedlist_queue", .path = "chapter_stack_and_queue/linkedlist_queue.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/deque.zig"
|
||||
// Run Command: zig build run_deque
|
||||
.{
|
||||
.name = "deque",
|
||||
.path = "chapter_stack_and_queue/deque.zig"
|
||||
},
|
||||
// Run Command: zig build run_deque -Doptimize=ReleaseFast
|
||||
.{ .name = "deque", .path = "chapter_stack_and_queue/deque.zig" },
|
||||
|
||||
// Source File: "chapter_stack_and_queue/linkedlist_deque.zig"
|
||||
// Run Command: zig build run_linkedlist_deque
|
||||
.{
|
||||
.name = "linkedlist_deque",
|
||||
.path = "chapter_stack_and_queue/linkedlist_deque.zig"
|
||||
},
|
||||
// Run Command: zig build run_linkedlist_deque -Doptimize=ReleaseFast
|
||||
.{ .name = "linkedlist_deque", .path = "chapter_stack_and_queue/linkedlist_deque.zig" },
|
||||
|
||||
// Source File: "chapter_hashing/hash_map.zig"
|
||||
// Run Command: zig build run_hash_map
|
||||
.{
|
||||
.name = "hash_map",
|
||||
.path = "chapter_hashing/hash_map.zig"
|
||||
},
|
||||
// Run Command: zig build run_hash_map -Doptimize=ReleaseFast
|
||||
.{ .name = "hash_map", .path = "chapter_hashing/hash_map.zig" },
|
||||
|
||||
// Source File: "chapter_hashing/array_hash_map.zig"
|
||||
// Run Command: zig build run_array_hash_map
|
||||
.{
|
||||
.name = "array_hash_map",
|
||||
.path = "chapter_hashing/array_hash_map.zig"
|
||||
},
|
||||
// Run Command: zig build run_array_hash_map -Doptimize=ReleaseFast
|
||||
.{ .name = "array_hash_map", .path = "chapter_hashing/array_hash_map.zig" },
|
||||
|
||||
// Source File: "chapter_tree/binary_tree.zig"
|
||||
// Run Command: zig build run_binary_tree
|
||||
.{
|
||||
.name = "binary_tree",
|
||||
.path = "chapter_tree/binary_tree.zig"
|
||||
},
|
||||
// Run Command: zig build run_binary_tree -Doptimize=ReleaseFast
|
||||
.{ .name = "binary_tree", .path = "chapter_tree/binary_tree.zig" },
|
||||
|
||||
// Source File: "chapter_tree/binary_tree_bfs.zig"
|
||||
// Run Command: zig build run_binary_tree_bfs
|
||||
.{
|
||||
.name = "binary_tree_bfs",
|
||||
.path = "chapter_tree/binary_tree_bfs.zig"
|
||||
},
|
||||
// Run Command: zig build run_binary_tree_bfs -Doptimize=ReleaseFast
|
||||
.{ .name = "binary_tree_bfs", .path = "chapter_tree/binary_tree_bfs.zig" },
|
||||
|
||||
// Source File: "chapter_tree/binary_tree_dfs.zig"
|
||||
// Run Command: zig build run_binary_tree_dfs
|
||||
.{
|
||||
.name = "binary_tree_dfs",
|
||||
.path = "chapter_tree/binary_tree_dfs.zig"
|
||||
},
|
||||
// Run Command: zig build run_binary_tree_dfs -Doptimize=ReleaseFast
|
||||
.{ .name = "binary_tree_dfs", .path = "chapter_tree/binary_tree_dfs.zig" },
|
||||
|
||||
// Source File: "chapter_tree/binary_search_tree.zig"
|
||||
// Run Command: zig build run_binary_search_tree
|
||||
.{
|
||||
.name = "binary_search_tree",
|
||||
.path = "chapter_tree/binary_search_tree.zig"
|
||||
},
|
||||
// Run Command: zig build run_binary_search_tree -Doptimize=ReleaseFast
|
||||
.{ .name = "binary_search_tree", .path = "chapter_tree/binary_search_tree.zig" },
|
||||
|
||||
// Source File: "chapter_tree/avl_tree.zig"
|
||||
// Run Command: zig build run_avl_tree
|
||||
.{
|
||||
.name = "avl_tree",
|
||||
.path = "chapter_tree/avl_tree.zig"
|
||||
},
|
||||
// Run Command: zig build run_avl_tree -Doptimize=ReleaseFast
|
||||
.{ .name = "avl_tree", .path = "chapter_tree/avl_tree.zig" },
|
||||
|
||||
// Source File: "chapter_heap/heap.zig"
|
||||
// Run Command: zig build run_heap
|
||||
.{
|
||||
.name = "heap",
|
||||
.path = "chapter_heap/heap.zig"
|
||||
},
|
||||
// Run Command: zig build run_heap -Doptimize=ReleaseFast
|
||||
.{ .name = "heap", .path = "chapter_heap/heap.zig" },
|
||||
|
||||
// Source File: "chapter_heap/my_heap.zig"
|
||||
// Run Command: zig build run_my_heap
|
||||
.{
|
||||
.name = "my_heap",
|
||||
.path = "chapter_heap/my_heap.zig"
|
||||
},
|
||||
// Run Command: zig build run_my_heap -Doptimize=ReleaseFast
|
||||
.{ .name = "my_heap", .path = "chapter_heap/my_heap.zig" },
|
||||
|
||||
// Source File: "chapter_searching/linear_search.zig"
|
||||
// Run Command: zig build run_linear_search
|
||||
.{
|
||||
.name = "linear_search",
|
||||
.path = "chapter_searching/linear_search.zig"
|
||||
},
|
||||
// Run Command: zig build run_linear_search -Doptimize=ReleaseFast
|
||||
.{ .name = "linear_search", .path = "chapter_searching/linear_search.zig" },
|
||||
|
||||
// Source File: "chapter_searching/binary_search.zig"
|
||||
// Run Command: zig build run_binary_search
|
||||
.{
|
||||
.name = "binary_search",
|
||||
.path = "chapter_searching/binary_search.zig"
|
||||
},
|
||||
// Run Command: zig build run_binary_search -Doptimize=ReleaseFast
|
||||
.{ .name = "binary_search", .path = "chapter_searching/binary_search.zig" },
|
||||
|
||||
// Source File: "chapter_searching/hashing_search.zig"
|
||||
// Run Command: zig build run_hashing_search
|
||||
.{
|
||||
.name = "hashing_search",
|
||||
.path = "chapter_searching/hashing_search.zig"
|
||||
},
|
||||
// Run Command: zig build run_hashing_search -Doptimize=ReleaseFast
|
||||
.{ .name = "hashing_search", .path = "chapter_searching/hashing_search.zig" },
|
||||
|
||||
// Source File: "chapter_searching/two_sum.zig"
|
||||
// Run Command: zig build run_two_sum
|
||||
.{
|
||||
.name = "two_sum",
|
||||
.path = "chapter_searching/two_sum.zig"
|
||||
},
|
||||
// Run Command: zig build run_two_sum -Doptimize=ReleaseFast
|
||||
.{ .name = "two_sum", .path = "chapter_searching/two_sum.zig" },
|
||||
|
||||
// Source File: "chapter_sorting/bubble_sort.zig"
|
||||
// Run Command: zig build run_bubble_sort
|
||||
.{
|
||||
.name = "bubble_sort",
|
||||
.path = "chapter_sorting/bubble_sort.zig"
|
||||
},
|
||||
// Run Command: zig build run_bubble_sort -Doptimize=ReleaseFast
|
||||
.{ .name = "bubble_sort", .path = "chapter_sorting/bubble_sort.zig" },
|
||||
|
||||
// Source File: "chapter_sorting/insertion_sort.zig"
|
||||
// Run Command: zig build run_insertion_sort
|
||||
.{
|
||||
.name = "insertion_sort",
|
||||
.path = "chapter_sorting/insertion_sort.zig"
|
||||
},
|
||||
// Run Command: zig build run_insertion_sort -Doptimize=ReleaseFast
|
||||
.{ .name = "insertion_sort", .path = "chapter_sorting/insertion_sort.zig" },
|
||||
|
||||
// Source File: "chapter_sorting/quick_sort.zig"
|
||||
// Run Command: zig build run_quick_sort
|
||||
.{
|
||||
.name = "quick_sort",
|
||||
.path = "chapter_sorting/quick_sort.zig"
|
||||
},
|
||||
// Run Command: zig build run_quick_sort -Doptimize=ReleaseFast
|
||||
.{ .name = "quick_sort", .path = "chapter_sorting/quick_sort.zig" },
|
||||
|
||||
// Source File: "chapter_sorting/merge_sort.zig"
|
||||
// Run Command: zig build run_merge_sort
|
||||
.{
|
||||
.name = "merge_sort",
|
||||
.path = "chapter_sorting/merge_sort.zig"
|
||||
},
|
||||
// Run Command: zig build run_merge_sort -Doptimize=ReleaseFast
|
||||
.{ .name = "merge_sort", .path = "chapter_sorting/merge_sort.zig" },
|
||||
|
||||
// Source File: "chapter_sorting/radix_sort.zig"
|
||||
// Run Command: zig build run_radix_sort
|
||||
.{
|
||||
.name = "radix_sort",
|
||||
.path = "chapter_sorting/radix_sort.zig"
|
||||
},
|
||||
|
||||
// Run Command: zig build run_radix_sort -Doptimize=ReleaseFast
|
||||
.{ .name = "radix_sort", .path = "chapter_sorting/radix_sort.zig" },
|
||||
};
|
||||
|
||||
inline for (group_name_path) |name_path| {
|
||||
@@ -250,10 +151,10 @@ pub fn build(b: *std.Build) void {
|
||||
.root_source_file = .{ .path = name_path.path },
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
});
|
||||
exe.addModule("include", b.addModule("", .{
|
||||
.source_file = .{ .path = "include/include.zig" },
|
||||
}));
|
||||
}));
|
||||
b.installArtifact(exe);
|
||||
const run_cmd = b.addRunArtifact(exe);
|
||||
run_cmd.step.dependOn(b.getInstallStep());
|
||||
|
||||
@@ -63,7 +63,7 @@ pub fn traverse(nums: []i32) void {
|
||||
// 在数组中查找指定元素
|
||||
pub fn find(nums: []i32, target: i32) i32 {
|
||||
for (nums, 0..) |num, i| {
|
||||
if (num == target) return @intCast(i32, i);
|
||||
if (num == target) return @intCast(i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ fn quadratic(n: i32) i32 {
|
||||
fn bubbleSort(nums: []i32) i32 {
|
||||
var count: i32 = 0; // 计数器
|
||||
// 外循环:未排序区间为 [0, i]
|
||||
var i: i32 = @intCast(i32, nums.len ) - 1;
|
||||
var i: i32 = @as(i32, @intCast(nums.len)) - 1;
|
||||
while (i > 0) : (i -= 1) {
|
||||
var j: usize = 0;
|
||||
// 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端
|
||||
@@ -154,7 +154,7 @@ pub fn main() !void {
|
||||
count = quadratic(n);
|
||||
std.debug.print("平方阶的计算操作数量 = {}\n", .{count});
|
||||
for (&nums, 0..) |*num, i| {
|
||||
num.* = n - @intCast(i32, i); // [n,n-1,...,2,1]
|
||||
num.* = n - @as(i32, @intCast(i)); // [n,n-1,...,2,1]
|
||||
}
|
||||
count = bubbleSort(&nums);
|
||||
std.debug.print("平方阶(冒泡排序)的计算操作数量 = {}\n", .{count});
|
||||
|
||||
@@ -10,7 +10,7 @@ pub fn randomNumbers(comptime n: usize) [n]i32 {
|
||||
var nums: [n]i32 = undefined;
|
||||
// 生成数组 nums = { 1, 2, 3, ..., n }
|
||||
for (&nums, 0..) |*num, i| {
|
||||
num.* = @intCast(i32, i) + 1;
|
||||
num.* = @as(i32, @intCast(i)) + 1;
|
||||
}
|
||||
// 随机打乱数组元素
|
||||
const rand = std.crypto.random;
|
||||
@@ -23,7 +23,7 @@ pub fn findOne(nums: []i32) i32 {
|
||||
for (nums, 0..) |num, i| {
|
||||
// 当元素 1 在数组头部时,达到最佳时间复杂度 O(1)
|
||||
// 当元素 1 在数组尾部时,达到最差时间复杂度 O(n)
|
||||
if (num == 1) return @intCast(i32, i);
|
||||
if (num == 1) return @intCast(i);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ fn binarySearch(comptime T: type, nums: std.ArrayList(T), target: T) T {
|
||||
} else if (nums.items[m] > target) { // 此情况说明 target 在区间 [i, m-1] 中
|
||||
j = m - 1;
|
||||
} else { // 找到目标元素,返回其索引
|
||||
return @intCast(T, m);
|
||||
return @intCast(m);
|
||||
}
|
||||
}
|
||||
// 未找到目标元素,返回 -1
|
||||
@@ -38,7 +38,7 @@ fn binarySearchLCRO(comptime T: type, nums: std.ArrayList(T), target: T) T {
|
||||
} else if (nums.items[m] > target) { // 此情况说明 target 在区间 [i, m) 中
|
||||
j = m;
|
||||
} else { // 找到目标元素,返回其索引
|
||||
return @intCast(T, m);
|
||||
return @intCast(m);
|
||||
}
|
||||
}
|
||||
// 未找到目标元素,返回 -1
|
||||
|
||||
@@ -31,7 +31,7 @@ pub fn main() !void {
|
||||
var map = std.AutoHashMap(i32, i32).init(std.heap.page_allocator);
|
||||
defer map.deinit();
|
||||
for (nums, 0..) |num, i| {
|
||||
try map.put(num, @intCast(i32, i)); // key: 元素,value: 索引
|
||||
try map.put(num, @as(i32, @intCast(i))); // key: 元素,value: 索引
|
||||
}
|
||||
var index = hashingSearchArray(i32, map, target);
|
||||
std.debug.print("目标元素 3 的索引 = {}\n", .{index});
|
||||
|
||||
@@ -11,7 +11,7 @@ fn linearSearchArray(comptime T: type, nums: std.ArrayList(T), target: T) T {
|
||||
for (nums.items, 0..) |num, i| {
|
||||
// 找到目标元素, 返回其索引
|
||||
if (num == target) {
|
||||
return @intCast(T, i);
|
||||
return @intCast(i);
|
||||
}
|
||||
}
|
||||
// 未找到目标元素,返回 -1
|
||||
|
||||
@@ -14,7 +14,7 @@ pub fn twoSumBruteForce(nums: []i32, target: i32) ?[2]i32 {
|
||||
var j = i + 1;
|
||||
while (j < size) : (j += 1) {
|
||||
if (nums[i] + nums[j] == target) {
|
||||
return [_]i32{@intCast(i32, i), @intCast(i32, j)};
|
||||
return [_]i32{@intCast(i), @intCast(j)};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,9 +31,9 @@ pub fn twoSumHashTable(nums: []i32, target: i32) !?[2]i32 {
|
||||
// 单层循环,时间复杂度 O(n)
|
||||
while (i < size) : (i += 1) {
|
||||
if (dic.contains(target - nums[i])) {
|
||||
return [_]i32{dic.get(target - nums[i]).?, @intCast(i32, i)};
|
||||
return [_]i32{dic.get(target - nums[i]).?, @intCast(i)};
|
||||
}
|
||||
try dic.put(nums[i], @intCast(i32, i));
|
||||
try dic.put(nums[i], @intCast(i));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ fn countingSortDigit(nums: []i32, exp: i32) !void {
|
||||
var n = nums.len;
|
||||
// 统计 0~9 各数字的出现次数
|
||||
for (nums) |num| {
|
||||
var d = @bitCast(u32, digit(num, exp)); // 获取 nums[i] 第 k 位,记为 d
|
||||
var d: u32 = @bitCast(digit(num, exp)); // 获取 nums[i] 第 k 位,记为 d
|
||||
counter[d] += 1; // 统计数字 d 的出现次数
|
||||
}
|
||||
// 求前缀和,将“出现个数”转换为“数组索引”
|
||||
@@ -34,7 +34,7 @@ fn countingSortDigit(nums: []i32, exp: i32) !void {
|
||||
var res = try mem_allocator.alloc(i32, n);
|
||||
i = n - 1;
|
||||
while (i >= 0) : (i -= 1) {
|
||||
var d = @bitCast(u32, digit(nums[i], exp));
|
||||
var d: u32 = @bitCast(digit(nums[i], exp));
|
||||
var j = counter[d] - 1; // 获取 d 在数组中的索引 j
|
||||
res[j] = nums[i]; // 将当前元素填入索引 j
|
||||
counter[d] -= 1; // 将 d 的数量减 1
|
||||
|
||||
@@ -38,7 +38,7 @@ pub fn AVLTree(comptime T: type) type {
|
||||
// 更新节点高度
|
||||
fn updateHeight(self: *Self, node: ?*inc.TreeNode(T)) void {
|
||||
// 节点高度等于最高子树高度 + 1
|
||||
node.?.height = std.math.max(self.height(node.?.left), self.height(node.?.right)) + 1;
|
||||
node.?.height = @max(self.height(node.?.left), self.height(node.?.right)) + 1;
|
||||
}
|
||||
|
||||
// 获取平衡因子
|
||||
|
||||
Reference in New Issue
Block a user