データ構造とアルゴリズムの実践:ユニオンファインドと二分木操作
本記事では、特定のアルゴリズム問題に対するアプローチと実装について考察します。ユニオンファインド、ハッシュテーブル、そして二分木のさまざまな操作(巡回、比較、対称性チェック、パス計算)に焦点を当てます。
アカウントのマージ問題
複数のメールアドレスが同一人物に属するかを判断し、関連するすべてのアドレスを統合する問題について考えます。これは、互い ...
8月16日 21:57 投稿
Javaアルゴリズム実践:コレクション操作とデータ構造
コレクション操作ユーティリティ
ArraysとCollectionsクラスの主要メソッド:
asList:リスト変換には戻り値が必要
copyOfRange:配列の部分コピー
型変換テクニック
// List<Integer> → int[]
public int[] convert(List<Integer> list) {
return list.stream()
.mapToInt(Integer::intValue)
.toArray();
}
Stream ...
8月10日 13:21 投稿
二分木の非再帰的走査
前順走査
前順走査では、ノードの値を「根 → 左の子 → 右の子」の順に処理します。
再帰的な実装
public void traverse(Node node) {
if (node == null) {
return;
}
System.out.println(node.value);
traverse(node.left);
traverse(node.right);
}
非再帰的な実装
非再帰では、スタックを使用してノードを管理します。根ノードを最初に処理 ...
8月4日 15:22 投稿
キューを用いた二分木の階層順探索手法
問題定義
二分木の根ノードを入力として、階層順(レベル順)にノード値を探索するアルゴリズムを実装します(各レベルでは左から右へ順にアクセス)。
解法アプローチ
標準的な手法として、キューを用いた幅優先探索(BFS)を適用します。
キューで各階層のノードを管理
各反復処理で現在のキューサイズを取得(現在階層のノード数)
ノードをデキューし、値を記 ...
7月28日 01:04 投稿
C言語によるヒープと二分木の実装
ヒープデータ構造の実装
ヘッダファイル定義
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
typedef int HeapValue;
typedef struct MinHeap {
HeapValue* elements;
int count;
int capacity;
} MinHeap;
void HeapInitialize(MinHeap* heap);
void HeapDestroy(MinHeap* heap) ...
7月23日 19:21 投稿
二分木のレベル順走査に関するLeetCode問題
NO.116 各ノードの次の右側ポインタを埋める
完全二分木が与えられます。この木はすべての葉ノードが同じレベルにあり、各親ノードが2つの子ノードを持つ特徴があります。二分木は以下のように定義されます:
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
各ノードのnextポインタを、その次の右側のノードを指すように設定してください。次の ...
7月22日 20:28 投稿
C言語で学ぶ二分木の基礎と応用
二分木の基本的な操作
二分木は、各ノードが最大2つの子ノードを持つ木構造です。この記事では、C言語を用いて二分木の作成、走査、特性の計算、および部分木の交換といった基本的な操作を実装する方法を学びます。
ノードの定義
二分木の各ノードは、データと左右の子ノードへのポインタを持ちます。以下にその構造体を示します。
struct Node {
char data;
str ...
7月11日 20:42 投稿
データ構造の基礎実装
データ構造入門
データ構造は効率的なアルゴリズム設計の基盤となる概念です。プログラミングにおける問題解決能力は反復練習によって向上します。
基本概念
データ構造は情報の論理的関係と記憶領域内での配置方法を扱います。主な構成要素:
データ:計算機で処理可能な情報の表現
データ要素:データの基本単位(レコード)
データ構造の三側面
データ操作: ...
7月10日 19:49 投稿
二分木の中順走査:再帰と反復による実装
二分木の根ノード root が与えられたとき、中順走査(In-order Traversal)の結果を返す。
中順走査の順序は:左部分木 → 根ノード → 右部分木
二分木ノードの定義
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) { ...
6月21日 18:13 投稿
二分木の基本操作と実装
二分木の基礎知識(概念、特性、走査方法)について前回の記事で学びました。今回は主にコードの実装に焦点を当てます。
目次
二分木の疑似作成
二分木の走査
二分木のノード数の取得
二分木の葉ノード数の取得
二分木の第Kレベルのノード数の取得
二分木の高さの取得
二分木での要素検索
二分木の疑似作成
なぜ疑似作成と呼ぶのでしょうか。二分木の作成は非常に複雑なプ ...
6月17日 16:41 投稿