二叉数的建立和求树的深度
Node.java
1.先定义一个节点
public class Node {
int data;
Node left;
Node right;
Node(int x){
this.left=null;
this.right=null;
this.data=x;
}
}
2.Btree.java 然后定义一个棵二叉数
/**
* Created by xizwu on 2016/11/3.
* the deep of the Btree
*/
public class Btree {
Node root;
public Btree(){
root=null;
}
public void BuildBtree(Node node,int val){
if(root==null)
{
root=new Node(val);
}else{
if(val<node.data){
if(node.left==null)
{
node.left=new Node(val);
}else{
BuildBtree(node.left,val);
}
}else{
if(node.right==null)
{
node.right=new Node(val);
}else {
BuildBtree(node.right, val);
}
}
}
}
public int deepOfTree(Node node){
/*
树的深度
* */
if(node ==null){
return 0;
}
int left=deepOfTree(node.left);
int right=deepOfTree(node.right);
if(left==0&&right==0) return 1;
return Math.max(left,right)+1;
}
public int minDepth(Node node){
/*
* 根到叶子节点 的最短路径
* */
if(node==null)
return 0;
int left=minDepth(node.left);
int right=minDepth(node.right);
if(left==0 &&right==0) return 1;
if(left==0) left=Integer.MAX_VALUE;
if(right==0) right=Integer.MAX_VALUE;
return Math.min(left,right)+1;
}
public void preoder(Node node){
if(node==null)
{ return;}
System.out.println(node.data);
preoder(node.right);
preoder(node.left);
}
public void inorder(Node node){
if(node==null){
return;
}
inorder(node.right);
System.out.println(node.data);
inorder(node.right);
}
public void postorder(Node node){
if(node==null){
return;
}
postorder(node.right);
System.out.println(node.data);
postorder(node.right);
}
}
3.执行测试程序
/**
* Created by xizwu on 2016/11/3.
*/
public class Maintest {
public static void main(String[] args){
Btree mytree=new Btree();
int[] a={2,4,12,6,45};
for (int i=0;i<a.length;i++)
{
mytree.BuildBtree(mytree.root,a[i]);
}
int b=mytree.deepOfTree(mytree.root);
System.out.println(b);
System.out.println("#####################");
mytree.preoder(mytree.root);
}
}