二叉树基本操作经典实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本程序由SOGOF完成
该完整程序主要是递归函数的使用及模板的使用,完成了对二叉树基本的链表操作,主要有二叉树的建立,前序、中序、后序遍历,求树的高度,每层结点数(包含树的最大宽度),左右结点对换,二叉树的内存释放,求解树的叶子数。
#include
using namespace std;
#define FLAG'#'
typedef char Record;
template
struct Binary_Node
{
Entry data;
Binary_Node
Binary_Node
Binary_Node();
Binary_Node(const Entry& x);
};
template
Binary_Node
{
left=NULL;
right=NULL;
}
template
Binary_Node
{
data=x;
left=NULL;
right=NULL;
}
template
class Binary_tree
{
public:
bool empty()const;
Binary_tree();
Binary_tree(Binary_tree
void create_tree(Binary_Node
void recursive_copy(Binary_Node
void pre_traverse(Binary_Node
void mid_traverse(Binary_Node
void post_traverse(Binary_Node
void count_node(Binary_Node
void count_leaves(Binary_Node
int tree_height(Binary_Node
void Ltree_To_Rtree(Binary_Node
void count_width(Binary_Node
int get_count()const;//得到树的结点数
Binary_Node
void destroy_tree(Binary_Node
Binary_tree
protected:
T*pre_visit;
T*mid_visit;
Binary_Node
int node_numb;
};
template
Binary_tree
{
root=NULL;
node_numb=0;
}
template
void
Binary_tree
if(tree==NULL)
{
return;
}
else
{
cur=new Binary_Node
node_numb++;
recursive_copy(tree->left,cur->left);
recursive_copy(tree->right,cur->right);
}
}
template
Binary_tree
recursive_copy(org.root,root);
}
template
Binary_tree
recursive_copy(org.root,root);
return *this;
}
template
bool Binary_tree
{
return root==NULL;
}
template
int Binary_tree
{
return node_numb;
}
template
void Binary_tree
{
T val;
cout<<"请输入数据,若空以#输入: ";
cin>>val;
tree=new Binary_Node
if(val==FLAG)
{
tree=NULL;
return;
}
else
{
node_numb++;
if(root==NULL)
root=tree;
create_tree(tree->left);
create_tree(tree->right);
}