일반적으로 트리 데이터 구조는 각 노드가 모든 하위 노드에 대한 포인터를 포함하는 방식으로 구성됩니다.
+-----------------------------------------+
| root |
| child1 child2 child3 |
+--+------------------+----------------+--+
| | |
+---------------+ +---------------+ +---------------+
| node1 | | node2 | | node3 |
| child1 child2 | | child1 child2 | | child1 child2 |
+--+---------+--+ +--+---------+--+ +--+---------+--+
| | | | | |
이것은 자연스러운 것처럼 보이지만 몇 가지 문제가 있습니다. 예를 들어 자식 노드의 수가 다양 할 경우 자식을 관리하려면 배열이나 목록과 같은 것이 필요합니다.
대신 (first) child 및 (next) 형제 포인터 만 사용하면 다음과 같은 것을 얻을 수 있습니다.
+-------------------+
| root |
| child sibling +--->NULL
+--+----------------+
|
+----------------+ +----------------+ +----------------+
| node1 | | node2 | | node3 |
| child sibling +--->| child sibling +--->| child sibling +--->NULL
+--+-------------+ +--+-------------+ +--+-------------+
| | |
분명히 이런 종류의 구조는 나무를 나타낼 수도 있지만 몇 가지 장점을 제공합니다. 가장 중요한 것은 더 이상 자식 노드 수에 대해 걱정할 필요가 없다는 것입니다. 구문 분석 트리에 사용될 때 깊은 트리가되지 않고 "a + b + c + d + e"와 같은 용어를 자연스럽게 표현합니다.
컬렉션 라이브러리는 이와 같은 트리 구조를 제공합니까? 파서는 그러한 구조를 사용합니까? 그렇지 않다면 이유는 무엇입니까?