数据结构、树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

class BinaryNode{

public E data;

public BinaryNodeleft,right;

public BinaryNode(E data,BinaryNodeleft,BinaryNoderight)

{

this.data=data;

this.left =left ;

this.right=right;

}

public BinaryNode(E data){

this(data,null,null);

}

public BinaryNode(){

this(null,null,null);

}

public boolean isLeaf()

{

return this.left ==null&&this.right==null;

}

public String toString()

{

return this.data .toString();

}

}

class BinaryTree{

private int i=0;

private int qq=0;

private int qqq=0;

private int cc=0;

private int su=0;

private int ww=0;

private int jilu=0;

private int cen=0;

protected BinaryNoderoot;

public BinaryTree(){

root=null;

}

public BinaryTree(BinaryNode root )

{

this.root =root;

}

public boolean isEmpty(){

return this.root ==null;

}

public BinaryNode getRoot(){

return this.root ;

}

public void preOrder(){

System.out.print("\n 先根序列");

preOrder(root);

}

private void preOrder(BinaryNode p){

if(p!=null){

System.out.print(p.data+" ");

preOrder(p.left);

preOrder(p.right);

}

}

public void inOrder(){

System.out.print("\n 中根序列");

inOrder(root);

}

private void inOrder(BinaryNodep)

{

if(p!=null)

{

inOrder(p.left);

System.out.print(p.data +" ");

inOrder(p.right);

}

}

public void postOrder(){

System.out.print("\n");

postOrder(root);

}

private void postOrder(BinaryNodep){

if(p!=null){

postOrder(p.left );

postOrder(p.right);

System.out.print(p.data+" ");

}

}

public BinaryTree(E[] preorder){

root=create(preorder);

}

private BinaryNodecreate(E[]preorder ){

BinaryNodep=null;

if(i

E elem=preorder[i];

i++;

if(elem!=null)

{

p=new BinaryNode(elem);

p.left=create(preorder);

p.right=create(preorder);

}

}

return p;

}

public void leaf()

{ System.out.print("叶子结点");

leaf(root);

}

private void leaf(BinaryNodea)

{ if(a!=null)

{

if(a.isLeaf())

{

System.out.print( a.data.toString()+" ");

}

leaf(a.left);

leaf(a.right);

}

}

private void leafshu(BinaryNodea)

{ if(a!=null)

{

if(a.isLeaf())

{

su++;

}

leafshu(a.left);

leafshu(a.right);

}

}

public void leafsu()

{

this.leafshu(root);

System.out.println("叶子结点个数:"+su);

}

public void zyh()

{

this.zyh(root);

}

private void zyh(BinaryNodea)

{

if(a!=null)

{ BinaryNode c=a.left;

a.left =a.right;

a.right=c;

zyh(a.left);

zyh(a.right);

}

}

public int height()

{

return height(root);

}

private int height(BinaryNodep){

if(p!=null)

{

int ld=height(p.left );

int rd=height(p.right);

return (ld>=rd)?ld+1:rd+1;

}

return 0;

}

public void wanquan()

{

cen=this.height()-1;

this.wanquan(root);

if(ww>0||jilu>1||cen

System.out.println("no");

else

System.out.println("yes");

}

private void wanquan(BinaryNodea)

{ if(a!=null){

if(!a.isLeaf()){

if(a.left==null||a.right ==null)

ww++;

else if(a.right .isLeaf()&&a.left.isLeaf()&&cen!=this.cengci(a.right.data)) {cen--;

if(cen!=this.cengci(right.data))

cen--;

}

else if(a.left .isLeaf()&&!a.right .isLeaf())

cen=cen-6;

else if(!a.left.isLeaf()&&a.right .isLeaf()&&cen>this.cengci(a.left.data)+1) cen=cen-10;

if(a.right ==null&&a.left .isLeaf())

{

cen--;

jilu++;

ww--;

}

wanquan(a.left);

wanquan(a.right);

相关文档
最新文档