二叉树
排序二叉树是经常遇到的一个数据结构,相关的递归算法也是考察的重点。以下c++示例代码作为相关总结和备份:[cpp]#include <iostream>using namespace std;typedef int T;//下面是关于二叉树的遍历、查找、删除、更新数据的代码(递归算法):class bst{struct Node{T data;Node* L;Node* R;Node(const T& d,Node* lp=NULL,Node* rp=NULL):data(d),L(lp),R(rp){}};Node* root;int num;public:bst():root(NULL),num(0){}void clear(Node* t){if(t==NULL)return;clear(t->L);clear(t->R);delete t;t = NULL;}~bst(){clear(root);}void clear(){clear(root);num = 0;root = NULL;}bool empty(){return root==NULL;}int size(){return num;}T getRoot(){if(empty()) throw "empty tree";return root->data;}//LNR-Travel N(Node)、L(Left subtree)和R(Right subtree)void travel(Node* tree){if(tree==NULL) return;travel(tree->L);cout << tree->data << ' ';travel(tree->R);}void travel(){travel(root);cout << endl;}int height(Node* tree){if(tree==NULL) return 0;int lh = height(tree->L);int rh = height(tree->R);return 1+(lh>rh?lh:rh);}int height(){return height(root);}void insert(Node*& tree,const T& d){if(tree==NULL)tree = new Node(d);else if(d < tree->data)insert(tree->L,d);elseinsert(tree->R,d);}void insert(const T& d){insert(root,d);num++;}//Pass in the reference and return a reference for later write operation(such as modifiing data value)Node*& find(Node*& tree,const T& d){if(tree==NULL) return tree;if(tree->data == d) return tree;if(d < tree->data)return find(tree->L,d);elsereturn find(tree->R,d);}bool find(const T& d){return find(root,d)!=NULL;}bool update(const T& od,const T& nd){Node* p = find(root,od);if(p==NULL)return false;erase(od);insert(nd);return true;}bool erase(const T& d){Node*& pt = find(root,d);if(pt==NULL)return false;combine(pt->L,pt->R);Node* p = pt;pt = pt->R;delete p;//don't forget to value the ptr as NULL&n补充:软件开发 , C++ ,
上一个:pat1016 Phone Bills
下一个:一个硬币移动游戏的求解算法
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊