BÀI VIẾT
Ghi chép về xây dựng và vận hành hệ thống
Bài kỹ thuật — kiến trúc, bảo mật, và đôi khi là chuyện chiến trường.
#trees · Tất cả bài viết
Series
Thẻ
- #leetcode 50
- #array 13
- #dfs 11
- #recursion 10
- #bfs 9
- #dynamic-programming 9
- #arrays 7
- #hash-table 7
- #trees 7
- #binary-search 6
- #two-pointers 6
- #string 5
- #backtracking 4
- #dp 4
- #graphs 4
- #greedy 4
- #matrix 4
- #sliding-window 4
- #hash-map 3
- #heap-priority-queue 3
- #linked-list 3
- #binary-search-tree 2
- #heap 2
- #math 2
- #memoization 2
- #priority-queue 2
- #sorting 2
- #stack 2
- #strings 2
- #binary-tree 1
- #bit-manipulation 1
- #bucket-sort 1
- #counting 1
- #cycle-detection 1
- #divide-and-conquer 1
- #geometry 1
- #kadane 1
- #multi-source-bfs 1
- #prefix-sum 1
- #quickselect 1
- #simulation 1
- #string-matching 1
- #topological-sort 1
- #union-find 1
01
Validate Binary Search Tree: tại sao chỉ kiểm tra node cha là sai
Lỗi cổ điển nhất là so sánh một node chỉ với node cha trực tiếp. BST hợp lệ yêu cầu ràng buộc thứ tự toàn cục truyền xuống toàn bộ subtree — và cách sạch nhất để thể hiện điều này là mang theo các bounds hợp lệ qua từng lần gọi recursion.14 thg 6, 2026 · 11 phút đọc · #00035
02
Same Tree: hai cây, một câu hỏi đệ quy
Kiểm tra xem hai binary tree có giống hệt nhau hay không quy về một câu hỏi đệ quy duy nhất tại mỗi cặp node. Giải pháp DFS chỉ cần ba base case và một câu lệnh return. Nhưng BFS — xử lý hai cây theo từng level trong cùng một queue — cũng đáng hiểu, và các edge case ẩn chứa một vài chi tiết dễ nhầm.14 thg 6, 2026 · 11 phút đọc · #00033
03
Phần tử nhỏ thứ K trong BST: in-order traversal như một dòng dữ liệu đã sắp xếp
In-order traversal trên BST cho ra các node theo thứ tự tăng dần. Để tìm phần tử nhỏ thứ k, bạn không cần thu thập tất cả — chỉ cần dừng đúng lúc chạm đến node thứ k. Điều đó vừa đủ, vừa đúng.14 thg 6, 2026 · 11 phút đọc · #00036
04
Subtree of Another Tree: khi Same Tree trở thành bài toán con
LeetCode 572 hỏi liệu một cây nhị phân có xuất hiện dưới dạng subtree liên thông trong một cây khác không. Giải pháp DFS brute-force tái sử dụng hàm kiểm tra Same Tree từ bài 100 — gọn và đủ với ràng buộc đề cho. Cách tiếp cận serialize thành string cắt giảm chi phí asymptotic nhưng có một bẫy correctness quan trọng mà hầu hết implementation đều bỏ qua.14 thg 6, 2026 · 11 phút đọc · #00034
05
Invert Binary Tree: recursion là sự phù hợp tự nhiên
Đảo ngược binary tree là một trong những bài toán mà giải pháp đệ quy tự viết khi bạn nhìn thấy nó: hoán đổi các con, sau đó đệ quy vào mỗi cái. Phiên bản iterative với queue cũng hoạt động — chỉ là ít rõ ràng hơn tại sao bạn lại dùng nó ở đây.13 thg 6, 2026 · 12 phút đọc · #00030
06
Binary Tree Level Order Traversal: BFS với snapshot kích thước level
BFS trên cây xử lý các node theo từng cấp độ. Thủ thuật để nhóm chúng thành các danh sách riêng biệt là chụp snapshot kích thước hàng đợi ở đầu mỗi level — mọi node trong lô đó đều thuộc cùng một level, bất kể chúng đưa bao nhiêu node mới vào hàng đợi.13 thg 6, 2026 · 11 phút đọc · #00032
07
Maximum Depth of Binary Tree: chiều cao như một tính toán post-order
Chiều sâu của một cây bằng 1 cộng với chiều sâu tối đa của các cây con của nó. Đó là post-order traversal: xử lý con trước cha. Có ba cách tiếp cận — đệ quy (gọn nhất), iterative DFS với stack (cùng traversal, cơ chế khác), và BFS nơi chiều sâu bằng với số lượng level.13 thg 6, 2026 · 12 phút đọc · #00031
Đôi dòng ghi chép về những gì tôi đang xây
Nhận email khi tôi đăng bài mới — các bài kỹ thuật, không spam. Hủy đăng ký bất cứ lúc nào.