问题描述
创建二叉树,并使用递归算法求二叉树中叶子结点的数目
输入
输入一个用’.'来标明空子树的先根遍历序列,如ABD…EH…CF.I…G…
输出
叶子结点的个数
存储结构
二叉树
算法的基本思想
首先将输入的先序遍历的字符串转化为字符数组,依次比较数组中的每个字符,若等于“.”,则根赋值为空。不是“.”的字符为根赋值,递归调用方法按照先序根左右。
源代码
import java.util.Scanner;
public class BiTreeNode {
public Object data; //结点的数据域
public BiTreeNode lchild,rchild; //左右孩子域
public BiTreeNode(){
}
public BiTreeNode(Object data) {
this.data = data;
}
}
class BiTree{ //创建二叉树与实现二叉树遍历
public BiTreeNode root; //树的根节点
private static int index = 0;
//由标明空子树的先根遍历序列建立一个二叉树
public BiTree(String preStr){
char c = preStr.charAt(index++);
if(c!='.'){
root = new BiTreeNode(c);
root.lchild = new BiTree(preStr).root;
root.rchild = new BiTree(preStr).root;
}else
root = null;
}
//统计二叉树中叶子结点个数
public int countleafNode(BiTreeNode T){
int count = 0;
if(T != null){
if(T.lchild == null && T.rchild == null){
count++;
}else
{
count += countleafNode(T.lchild);
count += countleafNode(T.rchild);
}
}
return count;
}
}
class Main {//实现输入二叉树,输出叶子结点个数
public static void main(String []args){
System.out.println("请输入一个用'.'来标明空子树的先根遍历序列:");//例如ABD..EH...CF.I..G..
Scanner sc = new Scanner(System.in);
String preStr =sc.nextLine();
BiTree bitree= new BiTree(preStr);
System.out.println("二叉树中叶子结点的个数为"+bitree.countleafNode(bitree.root));
}
}