ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗An interactive, animated visualizer for the Binary Search Tree (BST), built for a DSA class demo. Every operation is animated step by step, and the bar under the tree explains each step in plain English ("35 > 30, go right").
src/FontData.cpp; no font files are loaded.struct BSTNode { key, left, right } with pointers.
There is no std::map/std::set.| Operation | What the animation shows |
|---|---|
Insert (one number or a list like 50 30 70 20) | comparison at each node ("17 < 50, go left"), the new node growing into the empty spot |
| Delete | the search path, then the case: leaf (just removed), one child (child moves up), two children (find the inorder successor, copy it, delete the successor) |
| Search | the path of comparisons; found (blue) or "not in the tree" |
| Inorder / Preorder / Postorder | each node lights up in visiting order; the output builds up at the top |
| Clear | removes every node so you can start again |
Windows + VS Code: see RUN_ON_WINDOWS_VSCODE.md for every command, or open the folder in VS Code and press Ctrl + Shift + B to run it on localhost.
You need SDL 2.0.18 or newer (for SDL_RenderGeometry); any current package is fine.
pacman -S --needed mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-SDL2 \
mingw-w64-ucrt-x86_64-cmake make
.exe outside the MSYS2 terminal (for example by double-clicking it), copy
SDL2.dll from C:\msys64\ucrt64\bin\ into the folder that holds TreeViz.exe.sudo apt install build-essential libsdl2-dev cmake # Debian / Ubuntu / Mint
sudo dnf install gcc-c++ make SDL2-devel cmake # Fedora
sudo pacman -S base-devel sdl2 cmake # Arch / Manjaro
xcode-select --install # compiler + make
brew install sdl2 cmake # Homebrew: https://brew.sh
cd TreeViz
make # builds ./TreeViz (TreeViz.exe on Windows)
./TreeViz # or: make run
With CMake instead:
cmake -S . -B build-cmake -DCMAKE_BUILD_TYPE=Release
cmake --build build-cmake
./build-cmake/TreeViz
Both builds compile with -Wall -Wextra and produce zero warnings (GCC 13 and Clang).
The web/ folder already contains the program compiled to WebAssembly, so you only need a
local web server. (Opening index.html by double-clicking does not work: browsers block
the program file on file:// pages.)
web/start-server.bat (needs Python from python.org with
"Add Python to PATH" ticked).cd web then python serve.py (or python3 serve.py).The window prints the direct link, e.g. http://localhost:8000, and opens it in your browser.
If port 8000 is busy it uses 8001, 8002, … and prints that link instead. Keep the window open
while you use the page; Ctrl+C stops it. (serve.py is only a launcher, not part of the C++ project.)
Deploy online with Vercel: import this repository in Vercel and click Deploy. The included
vercel.json publishes the ready-made web/ folder (no build step), so the site opens at your
*.vercel.app address.
To rebuild the web files after changing the C++ code: make web (needs the Emscripten SDK).
#ifdef __EMSCRIPTEN__ in App.cpp hands each frame to the browser; the desktop build is unchanged.
| Command | What it does |
|---|---|
./TreeViz --light | start in the light theme (often better on projectors) |
./TreeViz --selftest | 5000 random insert / delete / search operations, checking the BST ordering after each one |
./TreeViz --autotest | drives the real program with simulated key presses and clicks, then prints the average FPS |
./TreeViz --shot out.bmp "Insert:50 30 70|Search:30" | runs button presses and saves a screenshot |
| Input | Action |
|---|---|
Type a number (or a list 50 30 70) | the input box focuses by itself as you type |
| Enter | insert the typed value(s); each insert animates in turn |
| Delete key | delete the typed value(s) |
| Buttons in the bottom bar | Insert, Delete, Search, Inorder, Preorder, Postorder, Clear |
| (after any operation) | the button you used last stays highlighted in yellow until you use another one |
| Space | pause / resume the animation |
| Right arrow | next step (pauses automatically, then steps one at a time) |
| Left arrow | previous step (replays it backwards) |
| Up / Down arrows | faster / slower (0.25x – 4x); there is also a speed slider in the top bar |
| End | skip to the end of the queued animation |
| Tab | focus / unfocus the input box |
| F2 | light / dark theme |
| F3 | FPS counter |
| F11 | fullscreen |
| Ctrl+Q | quit |
Colours: yellow = node being compared · green = path already walked · blue = found · teal = new node / copied key · red = node being deleted.
include/ src/
App.h window, renderer, 60 FPS main loop
TreeVisualizer.h BASE CLASS: layout, buttons, input box, keys
BinaryVisBase.h binary-tree helpers + the three traversal animations
BSTVis.h THE BINARY SEARCH TREE: insert, delete, search, traversals
Anim.h Frame (snapshot) + AnimPlayer (queue of steps) + easing
Scene.h draws and blends two frames, in-order layout, camera fit
Gfx.h anti-aliased shapes and text through SDL_RenderGeometry
Font.h embedded bitmap font (data in FontData.cpp)
Theme.h colours, highlight kinds, dark / light theme
UI.h Button, InputBox, Slider
Base interface. BSTVis derives from TreeVisualizer, which exposes update(dt),
draw(gfx, w, h) and handleEvent(event). The BST implements:
setup(): buttons and info text,onAction(id, input): runs an operation and calls step("17 > 10, go right") along the way,buildScene(frame): describes the current tree as nodes and edges.Animation as a queue of steps. The real algorithm runs immediately on the real tree.
Each step() stores a snapshot (Frame) of every node's id, position, label and colour, plus
the log message. AnimPlayer plays the frames in order and eases between consecutive frames
(ease-in-out cubic):
Because the steps are stored, pause, single-step, step-back and speed control are simple and reliable. Operations clicked during an animation are queued behind it.
Layout. A node's x position is its index in an inorder traversal and y is its depth. A left child is therefore always left of its parent, and reading the nodes from left to right gives the keys in sorted order.
Rendering. VSync, double-buffered, 60 FPS. Circles and lines are drawn as triangles with a 1-pixel transparent edge, which gives anti-aliasing. HiDPI screens render at full resolution, and the window is resizable (minimum 1000 x 650).
The embedded glyph bitmaps were rasterised from DejaVu Sans (Bitstream Vera licence, which allows embedding and redistribution). Fonts © Bitstream, Inc. and the DejaVu authors.
See also DEMO_GUIDE.md (what to present and say) and VIVA_QA.md (25 viva questions with answers).