java實現二叉樹查詢,統計結點個數,統計樹的深度及判斷兩棵樹是否相等
阿新 • • 發佈:2018-12-01
二叉樹的建立在前面已經實現,現在只寫子函式
public bitreeNode searchNode(bitreeNode t,Object x){ if(t!=null){ if(t.getdata().equals(x)) //對根節點進行判斷 return t; else{ bitreeNode lresult=searchNode(t.getlchild(),x); //查詢左子樹 //若在左子樹中查詢到值為x的結點,則返回該結點;否則,在右子樹中查詢該結點並返回結果 return lresult!=null?lresult:searchNode(t.getrchild(),x); } } return null; } //計算二叉樹中結點個數 public int countNode(bitreeNode t){ //採用先根遍歷的方式對二叉樹進行遍歷,計算結點個數 int count=0; if(t!=null){ count++; //根結點加1 count=count+countNode(t.getlchild()); //加上左子樹結點數 count=count+countNode(t.getrchild()); //加上右子樹結點數 } return count; } public int countNode1(bitreeNode t){ //採用層次遍歷對二叉樹進行遍歷 int count=0; if(t!=null){ Linkqueue l=new Linkqueue(); //構造佇列 l.offer(t); //根節點入隊 while(!l.isEmpty()){ t=(bitreeNode)l.poll(); count++; //結點數目加1 if(t.getlchild()!=null) //左孩子非空,入隊 l.offer(t.getlchild()); if(t.getrchild()!=null) //右孩子非空,入隊 l.offer(t.getrchild()); } } return count; } public int getdepth(bitreeNode t){ if(t!=null){ int ldepth=getdepth(t.getlchild()); //左子樹的深度 int rdepth=getdepth(t.getrchild()); //右子樹的深度 return 1+(ldepth>rdepth?ldepth:rdepth); //返回左子樹和右子樹深度大的那一個 } return 0; } public boolean isequal(bitreeNode t1,bitreeNode t2){ if(t1==null&&t2==null) //同時為空 return true; if(t1!=null&&t2!=null) if(t1.getdata().equals(t2.getdata())) //根節點值是否相等 if(isequal(t1.getlchild(),t2.getlchild())) //左子樹是否相等 if(isequal(t1.getrchild(),t2.getrchild())) //右子樹是否相等 return true; return false; }