计算二叉树的深度
代码如下:
package Test;
import java.util.LinkedList;
public class Mytest1
{
public static void main(String[] args)
{
int a[]={5,1,4,6,8,10,3,2};
BinaryTree t=new BinaryTree();
t.BuildTree(a);
t.BreadthFirst();
System.out.println(t.findDeep(t.root));//输出树的深度
int temp=10;
System.out.println((temp&0x01)==1);
}
}
class BinaryTree
{
Node root=null;
BinaryTree(){};
public void BuildTree(int a[])
{
for(int i=0;i<a.length;i++)
insertNode(a[i]);
}
//树的深度
public int findDeep(Node node)
{
int tempdeep=0;
if(node==null)
{
tempdeep=0;//空节点,高度为0
}
else
{
tempdeep=Math.max(findDeep(node.left), findDeep(node.right));//实现递归调用
tempdeep=tempdeep+1;//有左右子树之一就会将深度增加
}
return tempdeep;
}
//广度优先遍历
public void BreadthFirst()
{
Node p=root;
LinkedList<Node> list=new LinkedList<Node>();//链表存储未访问过的节点
if(p!=null)
{
list.add(p);//首先将根节点加入队列
while(!list.isEmpty())//非空
{
p=list.poll();//弹出队列头部元素,并判断有没字节点,有的话就加入队列中
System.out.print(p.value+" ");
if(p.left!=null)
{
list.add(p.left);
}
if(p.right!=null)
{
list.add(p.right);
}
}
}
}
void insertNode(int value)
{
if(root==null)
{
root=new Node(value);
}
else
{
Node temp=root;
while(true)
{
if(value>temp.value)
{
if(temp.right!=null)
temp=temp.right;
else
{
temp.right=new Node(value);
break;
}
}
else if(value<temp.value)
{
if(temp.left!=null)
temp=temp.left;
else
{
temp.left=new Node(value);
break;
}
}
}
}
}
}
class Node
{
int value;
Node left;
Node right;
Node(){};
Node(int value)
{
this.value=value;
this.left=null;
this.right=null;
}
}