一、实验目的及要求
以下练习都需要用广度优先和深度优先算法实现一遍。
1:给定一棵二叉树,求二叉树的层数
2:给定一棵二叉树,求整棵树节点个数以及叶结点的个数
3:将树结点的数据域声明为int型,然后求出一棵树的最大值,最小值
(以上每一个题目的子题目都要用广度优先和深度优先实现)
二、实验内容及步骤
1、求二叉树的层数
(1)
import circleSqQueue.QueueDemo;
import java.util.Scanner;
class TreeNode
{
int data; //结点的数据域
TreeNode lchild; //左孩子域
TreeNode rchild; //右孩子域
private TreeNode rootl;
TreeNode()
{
this.lchild = null;
this.rchild = null;
}
TreeNode(int data)
{
this.data = data;
this.lchild = null;
this.rchild = null;
}
int getData()
{
return data;
}
}
public class TreeDemo {
static void PreTranverse(TreeNode T) //先根遍历
{
if (T != null)
{
System.out.print(T.data+" ");
PreTranverse(T.lchild);
PreTranverse(T.rchild);
}
}
static void InTranverse(TreeNode T) //中根遍历
{
if (T != null)
{
InTranverse(T.lchild);
System.out.print(T.data+" ");
InTranverse(T.rchild);
}
}
static void PostTranverse(TreeNode T) //后根遍历
{
if (T != null)
{
PostTranverse(T.lchild);
PostTranverse(T.rchild);
System.out.print(T.data+" ");
}
}
static void LevelTranverse(TreeNode rootl)//层次遍历,需引入变量
{
TreeNode T=rootl; //外部输入
if(T!=null) {
LinkQueue L=new LinkQueue();
L.offer(T);
while(!L.isEmpty()) {
T=(TreeNode)L.poll();
System.out.print(T.data+" ");
if(T.lchild!=null)
L.offer(T.lchild);
if(T.rchild!=null)
L.offer(T.rchild);
}
}
}
static TreeNode BuildbyLevel