【发布时间】:2012-08-28 21:10:20
【问题描述】:
C++ STL 类 std::map 使用二叉树实现 O(log(n)) 查找。但是对于树,迭代器如何工作并不是很明显。 ++ 运算符在树结构中的实际含义是什么?尽管“下一个元素”的概念在数组中有明显的实现,但对我来说,在树中并不那么明显。如何实现树迭代器?
【问题讨论】:
-
你可以先看看源码:sgi.com/tech/stl/stl_map.h
-
看一个典型的self-balancing binary search tree。通过查找正确的子节点或在树上上下移动,很容易看到从给定节点到下一个更大节点的算法。有时你必须跳几次,但它仍然是摊销的常数时间(因为树的高度是元素数量的对数)。
-
这篇维基百科文章可能会回答您的一些问题:Tree traversal。基本上,“下一个”元素可以根据您使用的遍历类型而有所不同。在
std::map的情况下,按顺序(从最小元素到最大元素)遍历树。