📄 rcssy.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>实验书写格式</title>
</head>
<body>
<p style="line-height: 150%">实验书写格式:<br>
标题:二叉树操作<br>
实验目的:<br>
1。熟悉二叉树结点的结构和对二叉树的基本操作<br>
2。掌握对二叉树每一种操作的具体实现<br>
3。学会利用递归的方法编写对二叉树这种递归数据结构进行<br>
处理的算法。<br>
实验内容: <br>
<抄上程序><br>
实验结果:<br>
<运行后屏幕上显示的所有交互性内容><br>
<br>
//程序(共三个文件):<br>
//文件名1: btree1.h<br>
<br>
typedef char ElemType;<br>
struct btreenode{<br>
ElemType data;<br>
btreenode* left;<br>
btreenode* right;<br>
};<br>
class binarytree{<br>
btreenode* root;<br>
public:<br>
binarytree(){root=NULL;}<br>
void createbtree(char * a);<br>
bool btreeempty(){return root==NULL;}<br>
void traversebtree(int mark);<br>
int btreedepth();<br>
int btreecount();<br>
int btreeleafcount();<br>
void printbtree();<br>
~binarytree();<br>
<br>
<br>
};<br>
<br>
<br>
//文件名2: btree1.cpp<br>
<br>
#include <stdlib.h><br>
#include "btree1.h"<br>
#include <iostream.h><br>
#include <strstrea.h><br>
<br>
void create(btreenode* &bt,char*a);<br>
void traverse(btreenode* bt,int mark);<br>
int depth(btreenode*bt);<br>
int count(btreenode*bt);<br>
int leafcount(btreenode*bt);<br>
void print(btreenode*bt);<br>
void deleteb(btreenode* bt);<br>
void clear(btreenode* &bt);<br>
<br>
<br>
<br>
void binarytree::createbtree(char *a)<br>
{<br>
create(root,a);<br>
}<br>
void create(btreenode* &bt,char*a)<br>
{<br>
btreenode* s[10];<br>
int top=-1;<br>
bt=NULL;<br>
btreenode* p;<br>
int k;<br>
istrstream ins(a);<br>
char ch;<br>
ins>>ch;<br>
while(ch!='@')<br>
{<br>
<br>
switch(ch)<br>
{<br>
case'(':<br>
top++;s[top]=p;k=1;break;<br>
case')':<br>
top--;<br>
break;<br>
case',':<br>
k=2;<br>
break;<br>
default:<br>
p=new btreenode;<br>
p->data=ch;<br>
p->left=p->right=NULL;<br>
if(bt==NULL)bt=p;<br>
else{<br>
if(k==1)s[top]->left=p;<br>
else s[top]->right=p;<br>
}<br>
}<br>
ins>>ch;<br>
}<br>
}<br>
void binarytree::traversebtree(int mark)<br>
{<br>
traverse(root,mark);<br>
}<br>
<br>
void traverse(btreenode*bt,int mark)<br>
{<br>
if(mark==1){<br>
if(bt!=NULL){<br>
cout<<bt->data<<' ';<br>
traverse(bt->left,mark);<br>
traverse(bt->right,mark);<br>
}<br>
}<br>
else if(mark==2){<br>
if(bt!=NULL){<br>
traverse(bt->left,mark);<br>
cout<<bt->data<<' ';<br>
traverse(bt->right,mark);<br>
}<br>
}<br>
else if(mark==3){<br>
if(bt!=NULL){<br>
traverse(bt->left,mark);<br>
traverse(bt->right,mark);<br>
cout<<bt->data<<' ';<br>
}<br>
}<br>
else if(mark==4)<br>
{<br>
const maxlength=30;<br>
btreenode* q[maxlength];<br>
int front=0,rear=0;<br>
btreenode* p;<br>
if(bt!=NULL){<br>
rear=(rear+1)%maxlength;<br>
q[rear]=bt;<br>
}<br>
while(front!=rear)<br>
{<br>
front=(front+1)%maxlength;<br>
p=q[front];<br>
cout<<p->data<<' ';<br>
if(p->left!=NULL)<br>
{<br>
rear=(rear+1)%maxlength;<br>
q[rear]=p->left;<br>
}<br>
if(p->right!=NULL)<br>
{<br>
rear=(rear+1)%maxlength;<br>
q[rear]=p->right;<br>
}<br>
}<br>
}<br>
else{<br>
cerr<<"mark's value is useless!tranverse the tree is a failure!"<<endl;<br>
exit(1);<br>
}<br>
}<br>
<br>
int binarytree::btreedepth()<br>
{return depth(root);}<br>
<br>
int depth(btreenode*bt)<br>
{<br>
if(bt==NULL)<br>
return 0;<br>
else<br>
{<br>
int dep1=depth(bt->left);<br>
int dep2=depth(bt->right);<br>
if(dep1>dep2)return dep1+1;<br>
else return dep2+1;<br>
}<br>
}<br>
<br>
int binarytree::btreecount()<br>
{<br>
return count(root);<br>
}<br>
<br>
int count(btreenode*bt)<br>
{<br>
if(bt==NULL) return 0;<br>
else<br>
return count(bt->left)+count(bt->right)+1;<br>
}<br>
<br>
int binarytree::btreeleafcount()<br>
{<br>
return leafcount(root);<br>
}<br>
<br>
int leafcount(btreenode* bt)<br>
{<br>
if(bt==NULL) return 0;<br>
else if(bt->left==NULL&&bt->right==NULL) return 1;<br>
else return leafcount(bt->left)+leafcount(bt->right);<br>
}<br>
<br>
void binarytree::printbtree()<br>
{<br>
print(root);<br>
}<br>
<br>
void print(btreenode*bt)<br>
{<br>
if(bt==NULL) return;<br>
else{<br>
cout<<bt->data;<br>
if(bt->left!=NULL||bt->right!=NULL)<br>
{<br>
cout<<'(';<br>
print(bt->left);<br>
if(bt->right!=NULL)<br>
cout<<',';<br>
print(bt->right);<br>
cout<<')';<br>
}<br>
}<br>
}<br>
<br>
<br>
binarytree::~binarytree()<br>
{<br>
deleteb(root);<br>
root=NULL;<br>
<br>
}<br>
void deleteb(btreenode* bt)<br>
{<br>
if(bt!=NULL)<br>
{<br>
deleteb(bt->left);<br>
deleteb(bt->right);<br>
<br>
<br>
delete bt;<br>
<br>
}<br>
}<br>
void clear(btreenode* &bt)<br>
{<br>
<br>
deleteb(bt);<br>
cout<<bt<<endl;<br>
bt=NULL; <br>
cout<<bt<<endl;<br>
}<br>
<br>
<br>
//文件名3: btreemain1.cpp<br>
<br>
#include<iostream.h><br>
#include"btree1.h"<br>
<br>
void main()<br>
{<br>
binarytree bt;<br>
<br>
char b[50];<br>
cout<<"输入以‘ @’字符作为结束符的二叉树广义表表示:"<<endl;<br>
cin.getline(b,sizeof(b));<br>
<br>
bt.createbtree(b);<br>
bt.printbtree();<br>
cout<<endl;<br>
cout<<"preorder:";<br>
bt.traversebtree(1);cout<<endl;<br>
cout<<"inorder:";<br>
bt.traversebtree(2);cout<<endl;<br>
cout<<"post:";<br>
bt.traversebtree(3);cout<<endl;<br>
cout<<"level:";<br>
bt.traversebtree(4);cout<<endl;<br>
cout<<"the depth of binary tree:";<br>
cout<<bt.btreedepth()<<endl;<br>
cout<<"the number of the binary tree's points:";<br>
cout<<bt.btreecount()<<endl;<br>
cout<<"the leaf number:";<br>
cout<<bt.btreeleafcount()<<endl;<br>
}<br>
<br>
<br>
<br>
<br>
<br>
<br>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -