1. 程式人生 > >java實現二叉樹查詢,統計結點個數,統計樹的深度及判斷兩棵樹是否相等

java實現二叉樹查詢,統計結點個數,統計樹的深度及判斷兩棵樹是否相等

二叉樹的建立在前面已經實現,現在只寫子函式

	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;
	}