设为首页 加入收藏

TOP

基于顺序存储的多叉树实现: (5) 兄弟遍历 (三)
2014-11-23 22:57:49 来源: 作者: 【 】 浏览:4
Tags:基于 顺序 存储 实现 兄弟
(7)间隔层定位方法的实现,代码如下:

1 template
2 template
3 inline void mtree::sibling_iterator_impl::first(no_reverse_tag)
4 {
5 assert(tree_&&root_<=tree_->size());
6 if (root_!=tree_->size())
7 forward_first();
8 else
9 off_ = 0;
10 }
11 template
12 template
13 inline void mtree::sibling_iterator_impl::first(reverse_tag)
14 {
15 assert(tree_&&root_<=tree_->size());
16 if (root_!=tree_->size())
17 forward_last();
18 else
19 off_ = 0;
20 }
21 template
22 template
23 inline void mtree::sibling_iterator_impl::last(no_reverse_tag)
24 {
25 assert(tree_&&root_<=tree_->size());
26 if (root_!=tree_->size())
27 forward_last();
28 else
29 off_ = 0;
30 }
31 template
32 template
33 inline void mtree::sibling_iterator_impl::last(reverse_tag)
34 {
35 assert(tree_&&root_<=tree_->size());
36 if (root_!=tree_->size())
37 forward_first();
38 else
39 off_ = 0;
40 }
41 template
42 template
43 inline void mtree::sibling_iterator_impl::increment(no_reverse_tag)
44 {
45 assert(tree_&&off_<=tree_->size());
46 off_!=tree_->size() forward_next() : first(no_reverse_tag());
47 }
48 template
49 template
50 inline void mtree::sibling_iterator_impl::increment(reverse_tag)
51 {
52 assert(tree_&&off_<=tree_->size());
53 off_!=tree_->size() forward_prev() : first(reverse_tag());
54 }
55 template
56 template
57 inline void mtree::sibling_iterator_impl::decrement(no_reverse_tag)
58 {
59 assert(tree_&&off_<=tree_->size());
60 off_!=tree_->size() forward_prev() : last(no_reverse_tag());
61 }
62 template
63 template
64 inline void mtree::sibling_iterator_impl::decrement(reverse_tag)
65 {
66 assert(tree_&&off_<=tree_->size());
67 off_!=tree_->size() forward_next() : last(reverse_tag());
68 }

四、使用示例
(1)正向遍历某结点的兄弟,代码如下:

1 mtree::iterator_base node;
2 mtree::sibling_iterator it = node;
3 mtree::sibling_iterator last = --it.end();
4 for (it = it.begin();it!=it.end();++it)
5 {
6 cout << *it;
7 if (it!=last)
8 cout <<" ";
9 }
(2)反向遍历某结点的兄弟,代码如下:
1 mtree::iterator_base node;
2 mtree::reverse_sibling_iterator r_it = node;
3 mtree::reverse_sibling_iterator r_last = --r_it.end();
4 for (r_it = r_it.begin();r_it!=r_it.end();++r_it)
5 {
6 cout << *r_it;
7 if (r_it!=r_last)
8 cout <<" ";
9 }

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇读入文件时最后一次重复 下一篇简易位图内存管理器的设计

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: