作者yantchen (球童Yanting)
看板NTUE-CS101
标题[课业] BST 参考
时间Sun Dec 27 22:37:40 2009
这篇会讲解一下部份BST的功能怎麽实做
给没头绪的人参考 看懂後自己把剩下的功能写出来
---
要求的功能
1. 宣告
2. 新增
3. 查询
4. 删除
5. inorder显示
---
宣告最简单
直接依照题目要求
class node
{
int value;
node *left, *right;
friend class tree;
public:
node(int v)
{
value = v;
left = right = NULL;
}
};
class tree
{
node *root;
public:
tree()
{
root = NULL;
}
};
node 应该很容易理解 就是两个链结的串列
tree 是我用来放root的地方 到时候连到树的每个节点
还有所有的动作都会在 tree 里面完成
为了让 tree 能操作 node 的东西 在 node 里面宣告 tree 成 friend
---
新增节点
演算法:
1. 从 root 开始
2. 判断目前节点 跟 新输入的值
若 大於, 目前节点 = 右节点
若 小於, 目前节点 = 左节点
3. 重复步骤 2, 直到 目前节点 == NULL
4. 插入新的节点在这里
程式码用递回写就非常简单
在 tree 的 public 里面增加一个 add 函数
void add(int val) // 前置作业
{
if(root == NULL) root = new node(val);
else add(val, root);
}
void add(int val, node *n) // add 递回函数
{
if(n->value < val)
{
if(n->right==NULL) n->right=new node(val); else add(val, n->right);
}
else
{
if(n->left ==NULL) n->left =new node(val); else add(val, n->left );
}
}
主程式只要呼叫
int main()
{
tree T;
T.add(10);
T.add(12);
...
}
---
再讲一个inorder吧
演算法也非常简单
1. 从 root 开始
2. 有左边就跳到左边
3. 显示自己
4. 跳到右边
在 tree 里面新增一个 public 的 show 函数
void show() // 前置作业
{
if(root == NULL)
{
cout << "这棵树没有树叶 是棵枯枯的树";
}
else
{
show(root);
}
}
void show(node *n) // show 的递回函数
{
if(n->left != NULL) show(n->left);
cout << n->value << '\t';
if(n->right != NULL) show(n->right);
}
---
剩下功能自己想想看
除了 del 比较难 其实其他的都很简单唷
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.127.36.183
1F:推 rockmyangel:一丝曙光 12/27 23:08
2F:推 didi12252001:推学长! 12/27 23:31
※ 编辑: yantchen 来自: 120.127.36.183 (12/28 00:46)
3F:推 snoopyuj:谢谢学长 给我许多灵感 12/28 17:50