12信管实验报告树与二叉树的基本操作文档格式.docx
- 文档编号:18762822
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:65.98KB
12信管实验报告树与二叉树的基本操作文档格式.docx
《12信管实验报告树与二叉树的基本操作文档格式.docx》由会员分享,可在线阅读,更多相关《12信管实验报告树与二叉树的基本操作文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
(1)输出叶子结点
//求二叉树叶子结点个数的递归算法
(2)publicclassleaf{//输出叶子结点
(3)publicstatic<
T>
voidleaf(BinaryTree<
bitree){
(4)leaf(bitree.root);
(5)}
(6)publicstatic<
voidleaf(BinaryNode<
p){
(7)if(p!
=null){
(8)if(p.left==null&
&
p.right==null){
(9)System.out.println(p.data+"
"
);
(10)}
(11)leaf(p.left);
(12)leaf(p.right);
(13)
(14)}
(15)}
(16)publicstaticvoidmain(Stringargs[]){
(17)Stringprelist[]={"
A"
"
B"
D"
null,"
G"
null,null,null,"
C"
E"
null,null,"
F"
};
//先根遍历序列
(18)BinaryTree<
String>
bitree=newBinaryTree<
(prelist);
//以先根遍历序列构造的一棵二叉树
(19)bitree.preOrder();
//先根次序遍历的递归算法
(20)leaf(bitree);
(21)
(22)Stringprelist2[]={"
(23)BinaryTree<
bitree2=newBinaryTree<
(prelist2);
(24)bitree2.preOrder();
(25)leaf(bitree2);
(26)
(27)}
(28)}
运算结果:
(2)求二叉树中叶子节点的个数
//求二叉树中叶子结点的个数的递归算法
publicclassgetLeaves{
publicstatic<
intgetLeaves(BinaryTree<
returngetLeaves(bitree.root);
}
publicstatic<
intgetLeaves(BinaryNode<
inti=0;
if(p!
=null)
{
if(p.left==null&
i++;
getLeaves(p.left);
getLeaves(p.right);
System.out.println(i);
return0;
}
publicstaticvoidmain(Stringargs[]){
Stringprelist[]={"
BinaryTree<
bitree.preOrder();
getLeaves(bitree);
Stringprelist2[]={"
bitree2.preOrder();
getLeaves(bitree2);
运算结果:
(3)将每个结点的左子树和右子树交换
//将二叉树的每个结点的左右子树交换的递归算法
//交换二叉树的左右子树的递归算法的实现
publicclassBitree_revolute{
voidBitree_revolute(BinaryTree<
Bitree_revolute(bitree.root);
//从bitree树的根结点开始遍历
voidBitree_revolute(BinaryNode<
p.setLeftChild(p.getRightChild());
//交换左右子树
p.setRightChild(p.getLeftChild());
System.out.println(p.data.toString());
if(p.getLeftChild()!
Bitree_revolute(p.getLeftChild());
if(p.getRightChild()!
Bitree_revolute(p.getRightChild());
publicstaticvoidmain(Stringargs[]){
Stringprelist[]={"
BinaryTree<
bitree.preOrder();
//先根次序遍历
Bitree_revolute(bitree);
Stringprelist2[]={"
bitree2.preOrder();
Bitree_revolute(bitree2);
(4)验证二叉树的性质3:
n0=n2+1
//验证二叉树的性质3的递归算法
publicclassProperty3<
{//验证二叉树的性质3,n0=n2+1
privatestaticintn0=0,n2=0;
//声明并初始化2度结点数n2,0度结点数n0(0度结点数即是叶子结点数)
voidcount(BinaryTree<
bitree){//统计二度结点数n2和叶子结点数n0
n0=0;
n2=0;
count(bitree.root);
System.out.println("
验证二叉树的性质3,n0="
+n0+"
n2="
+n2+"
n0==n2+1?
+(n0==n2+1));
privatestatic<
voidcount(BinaryNode<
p){//统计二度结点数n2和叶子结点数n0
//以p结点为根的子树的结点数
if(p!
{
if(p.left==null&
p.right==null)//叶子结点
n0++;
//
if(p.left!
=null&
p.right!
=null)//2度结点
n2++;
count(p.left);
count(p.right);
publicstaticvoidmain(Stringargs[]){//测试
//以一维数组Stringprelist[]存储二叉树的标明空子树的先根遍历序列
//以先根遍历序列prelist构造二叉树bitree
count(bitree);
//以一维数组Stringprelist2[]存储二叉树的标明空子树的先根遍历序列2
//以先根遍历序列构造二叉树bitree2
(5)判断一棵二叉树bitree是否与当前二叉树的一棵子树匹配。
方法一:
publicclassBoolIsSubTree_1{
Stringprestr=bitree.preOrder();
Stringinstr=bitree.inOrder();
Stringinlist[]={"
(prelist2,inlist);
if(inlist.toString().indexOf(instr)!
=-1&
(prelist.toString().indexOf(prestr)!
=-1)){
System.out.println("
bitree2是bitree的子树"
else
bitree2不是bitree的子树"
方法二:
//判断一棵二叉树是否为另一颗二叉树的子树的递归算法
publicclassBoolIsSubTree{
//以先根遍历序列构造一棵二叉树
//中根遍历序列
//以中根遍历序列和先根遍历序列构造一棵子树
BinaryNode<
p=null;
q=null;
bitree.postOrder(p,q,bitree2);
辅助类:
BinaryNode
publicclassBinaryNode<
{//二叉树的二叉链表结点类
publicTdata;
//数据域
publicBinaryNode<
left,right;
//链域,分别指向左右孩子结点
//构造结点,参数分别指定元素和左右孩子结点
publicBinaryNode(Tdata,BinaryNode<
left,BinaryNode<
right){//构造二叉树结点
this.data=data;
this.left=left;
this.right=right;
/**
*@paramargs
*/
publicBinaryNode(Tdata){//调用二叉树结点的构造方法
this(data,null,null);
//构造指定值的叶子结点
publicBinaryNode(){//调用二叉树结点的构造方法
this(null,null,null);
//空的结点
publicbooleanisLeaf(){
//TODOAuto-generatedmethodstub
BinaryNode<
p=null;
p.right==null)
returntrue;
else
returnfalse;
getRightChild(){//获取当前结点的右孩子结点
returnthis.left;
getLeftChild(){//获取当前节点的左孩子结点
returnthis.right;
publicvoidsetLeftChild(BinaryNode<
rightChild){//设置当前节点的右孩子结点
this.left=rightChild;
publicvoidsetRightChild(BinaryNode<
leftChild){//设置当前结点的左孩子结点
this.right=leftChild;
BinaryTree
importjava.util.LinkedList;
//线性链表
importjava.util.Stack;
//栈
publicclassBinaryTree<
implementsBinaryTTree<
root;
//根结点,结点结构为二叉链表
publicBinaryTree(){
this.root=null;
}//构造空的二叉树
publicbooleanisEmpty(){
returnthis.root==null;
//判断二叉树是否为空
@Override
publicintcount(){//返回一棵二叉树(子树)的结点数
returncount(root);
//返回二叉树的结点个数
publicintcount(BinaryNode<
p){//返回以p结点为根的子树的的结点个数
if(p==null)
return0;
return1+count(p.left)+count(p.right);
publicintheight(){
return0;
publicStringpreOrder(){//先根次序遍历二叉树
System.out.print("
先根次序遍历二叉树:
"
preOrder(root);
//调用先根次序遍历二叉树的递归方法
/*System.out.println();
*/
Stringprestr="
;
returnprestr;
publicStringpreOrder(BinaryNode<
p){//先根次序遍历以p结点为根结点的子二叉树,递归方法
if(p!
=null){//如果二叉树不为空
/*System.out.println(p.data.toString()+"
//访问当前结点
preOrder(p.left);
//按照先根次序遍历访问当前结点的左子树,递归调用
preOrder(p.right);
//按照先根次序遍历访问当前结点的右子树,递归调用*/
prestr+=p.data.toString();
}
publicStringinOrder(){//中根遍历二叉树
System.out.print("
中根次序遍历二叉树:
inOrder(root);
Stringinstr="
/*System.out.println();
returninstr;
publicStringinOrder(BinaryNode<
p){//中根次序遍历以p结点为根结点的子二叉树,递归方法
Stringinstr="
=null)//若二叉树不空
{
/*inOrder(p.left);
System.out.print(p.data.toString()+"
inOrder(p.right);
inOrder(p.left);
instr+=p.data.toString();
returninstr;
publicvoidpostOrder(){//后根次序遍历二叉树
后根次序遍历二叉树:
postOrder(root);
System.out.println();
publicvoidpostOrder(BinaryNode<
p,BinaryNode<
q,BinaryTree<
bitree2){//
q!
=null)//如果二叉树不为空
{
postOrder(p.left);
postOrder(p.right);
//System.out.println(p.data.toString()+"
/*if(p.data==q.data&
p.left==q.left&
p.right==q.right){
postOrder(q.left);
postOrder(q.right);
//遍历bitree2
}*/
//if(p.data==q.data){
//returnpostOrder(p.left,q.left,bitree2)&
postOrder(p.right,q.right,bitree2);
//}
if(p.data==bitree2.root){
if(p.data==q.data)
postOrder(p.left,q.left,bitree2);
postOrder(p.right,q.right,bitree2);
if((p.isLeaf()==true)&
(q.isLeaf()==true)&
(p.data==q.data)){
System.out.println("
/*publicbooleanpostOrder(BinaryNode<
p,BinaryTree<
bitree2){
q=bitree2.root;
postOrder(p.left);
postOrder(p.right);
if(p.data==q.data){
returnpostOrder(p.)
}*/
publicvoidpostOrder(BinaryNode<
p){//后根次序遍历以p结点为根结点的子二叉树,递归方法
postOrder(p.left);
postOrder(p.right);
publicvoidlevelorder(){
search(Tkey){/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 实验 报告 二叉 基本 操作