算法导论 第12章 12-2 基数树
2015-02-01 17:05
141 查看
算法导论 第12章思考题 基数树
题目
解决思路:
很显然,这是关于二叉查找树的应用,主要是运用插入和遍历。
关于插入,遍历01字符串,从根节点开始,经过一段时间的插入,现在进行到节点x,如果当前遇到的字符是0,且x的左孩子存在,则直接向左走,否则创建一个新节点成为x的左孩子,然后走到此节点;如果当前遇到的字符是1,且右孩子存在,则直接向右走,否则创建一个新节点成为x的右孩子,然后走到此节点。如此循环之后,如果当前字符恰好为字符串最后一个字符,那么就像给字符串存储到该节点,而之前所有遍历的节点中都存储空字符串。
关于遍历,既然要输出排序结果,根据我们这里的插入方式,需要选择先序遍历了。遍历过程中需要注意,如果遇到的节点存储非空字符串,则输出;否则,跳过。
下面是基数树的代码:
题目
解决思路:
很显然,这是关于二叉查找树的应用,主要是运用插入和遍历。
关于插入,遍历01字符串,从根节点开始,经过一段时间的插入,现在进行到节点x,如果当前遇到的字符是0,且x的左孩子存在,则直接向左走,否则创建一个新节点成为x的左孩子,然后走到此节点;如果当前遇到的字符是1,且右孩子存在,则直接向右走,否则创建一个新节点成为x的右孩子,然后走到此节点。如此循环之后,如果当前字符恰好为字符串最后一个字符,那么就像给字符串存储到该节点,而之前所有遍历的节点中都存储空字符串。
关于遍历,既然要输出排序结果,根据我们这里的插入方式,需要选择先序遍历了。遍历过程中需要注意,如果遇到的节点存储非空字符串,则输出;否则,跳过。
下面是基数树的代码:
#include<iostream> #include<string> using namespace std; typedef struct Node { struct Node *left; struct Node *right; string str; Node() :left(NULL), right(NULL){} }node, RTree; void insertRadixTree(RTree *rt, const string &str) { node *curr = rt; if (curr == NULL) return; for (string::size_type i = 0; i != str.size(); ++i) {//遍历每一个字符串 if (str[i] == '0') {//若当前字符为0,则往左走 if (curr->left == NULL) curr->left = new node(); curr = curr->left; } else {//为1则往右走 if (curr->right == NULL) curr->right = new node(); curr = curr->right; } if (i == str.size() - 1) curr->str = str; } } void createRadixTree(RTree *rt) { string str; cout << "Enter some 0_1 strings,CTRL+Z to end" << endl; while (cin >> str) insertRadixTree(rt, str); cin.clear(); } void preTraversal(RTree *rt) {//先序遍历 if (rt != NULL) { if (rt->str != "") cout << rt->str << endl; preTraversal(rt->left);//递归遍历左子树 preTraversal(rt->right);//递归遍历右子树 } } void destroy(node *root) { if (root == NULL) return; destroy(root->left); destroy(root->right); delete root; } int main() { RTree *rt = new node(); createRadixTree(rt); preTraversal(rt); destroy(rt); getchar(); return 0; }
相关文章推荐
- 《算法导论》第12章 二叉查找树 (3)基数树
- 算法导论-12-2-基数树
- 《算法导论》第12章 二叉查找树 (3)基数树(转)
- 算法导论 习题 12-2 基数树(Radix tree)
- 《算法导论》第12章 二叉查找树 (3)基数树
- 算法导论-12-2-基数树
- 《算法导论》第12章 二叉查找树 (3)基数树
- 算法导论-12-2-基数树
- 《算法导论》第12章 二叉查找树 (3)基数树
- 《算法导论》12、二叉查找树(C++实现)
- 《算法导论》读书笔记之第12章 二叉查找树
- 第12章:Continuous Latent Variables exercise 1-12
- 《算法导论》笔记 第12章 *12.4 随机构造的二叉查找树
- 算法导论 第8章 线性时间排序(计数排序、基数排序、桶排序)
- 《算法导论》第12章 二叉搜索树 个人笔记
- 《算法导论》笔记(12) 基本的图算法,最小生成树
- 《算法导论》— Chapter 12 二叉查找树
- 《算法导论》笔记 第12章 12.2 查询二叉查找树
- 《算法导论》笔记 第12章 *12.4 随机构造的二叉查找树
- 《Android源码设计模式》读书笔记 (12) 第12章 观察者模式