已知先序序列为:
A B C # # D E # G # # F # # #
Node类:
public class Node {
char data;
Node leftNode;
Node rightNode;
public Node() {
}
public Node(char data) {
this.data = data;
}
}
BiTree类:
public class BinTree {
Node head;//根节点
String input;//输入的字符串
int indexOfInput=0;//用于指向字符串中字符的位置
int len=0;
//以先序遍历方式建立二叉树
public void createBinTree() {
System.out.println("开始建立二叉树:");
input=new Scanner(System.in).next();
head=create();//构建二叉树
System.out.println("二叉树建立完成");
}
//以先序遍历方式建立二叉树
private Node create() {
char ch=input.charAt(indexOfInput++);
if(ch=='#') {
return null;
}
else {
Node node=new Node();
node.data=ch;
node.leftNode=create();
node.rightNode=create();
return node;
}
}
//先序遍历
public void preOrderTraverse(Node node) {
if(node!=null) {
System.out.print(node.data);
preOrderTraverse(node.leftNode);
preOrderTraverse(node.rightNode);
}
}
//中序遍历
public void inOrderTraverse(Node node) {
if(node!=null) {
inOrderTraverse(node.leftNode);
System.out.print(node.data);
inOrderTraverse(node.rightNode);
}
}
//后序遍历
public void postOrderTraverse(Node node) {
if(node!=null) {
postOrderTraverse(node.leftNode);
postOrderTraverse(node.rightNode);
System.out.print(node.data);
}
}
//判断树是否为空
public boolean isTreeNull() {
if(head==null)
return true;
else
return false;
}
//返回二叉树的长度
//如果是空树,则结点个数为0;
//否则,结点个数为左子树的结点个数+右子树的结点个数+1
public int NodeCount(Node node) {
if(isTreeNull())
return 0;
if(node==null)
return 0;
else
return NodeCount(node.leftNode)+NodeCount(node.rightNode)+1;
}
//计算二叉树中叶子节点的个数
//如果是空树,则叶子结点个数为0;
//否则,为左子树的叶子结点个数+右子树的叶子结点个数
public int LeafNodeCount(Node node) {
if(isTreeNull())
return 0;
//递归的两个边界
if(node==null)
return 0;
if(node.leftNode==null&&node.rightNode==null)
return 1;
else
return LeafNodeCount(node.leftNode)+LeafNodeCount(node.rightNode);
}
//计算二叉树的深度
//如果是空树,则深度为0;
//否则,递归计算左子树的深度记为m,递归计算右子树的深度记为n,二叉树的深度则为m与n的较大者加1
public int deepth(Node node) {
if (isTreeNull())
return 0;
if(node==null)
return 0;
else {
int m=deepth(node.leftNode);
int n=deepth(node.rightNode);
return m>=n?m+1:n+1;
}
}