先根遍历
//统计二叉树中结点个数的算法 (先根遍历)
public int countNode(BiTreeNode T) {
//采用先根遍历的方式对二叉树进行遍历,计算结点个数
int count=0;
if(T!=null) {
++count; //根结点+1
count+=countNode(T.lchild); //加上左子树上结点数
count+=countNode(T.rchild); //加上右子树上结点数
}
return count;
}
层次遍历
//统计二叉树中结点个数的算法(层次遍历)
public int countNodeLevel(BiTreeNode T) {
int count=0;
if(T!=null) {
Queue<BiTreeNode> L = new LinkedList<BiTreeNode>();//声明队列
L.offer(T); //根结点入队列
while(!L.isEmpty()) {
T=(BiTreeNode)L.poll();
++count; //结点数+1
if(T.lchild!=null)
L.offer(T.lchild); //左孩子非空,入队列
if(T.rchild!=null)
L.offer(T.rchild); //右孩子非空,入队列
}
}
return count;
}
递归遍历
//统计二叉树中结点个数的递归算法
public int countNode1(BiTreeNode T) {
if(T==null) {
return 0;
}else {
return countNode(T.lchild)+countNode(T.rchild)+1;
}
}
二叉树类描述:
package tree;
import java.util.LinkedList;
import java.util.Queue;
public class BiTree {
public BiTreeNode root; //树的根节点
public BiTree() {
this.root=null;
}
public BiTree(BiTreeNode root) {
this.root=root;
}
//统计二叉树中结点个数的算法 (先根遍历)
public int countNode(BiTreeNode T) {
//采用先根遍历的方式对二叉树进行遍历,计算结点个数
int count=0;
if(T!=null) {
++count; //根结点+1
count+=countNode(T.lchild); //加上左子树上结点数
count+=countNode(T.rchild); //加上右子树上结点数
}
return count;
}
//统计二叉树中结点个数的算法(层次遍历)
public int countNodeLevel(BiTreeNode T) {
int count=0;
if(T!=null) {
Queue<BiTreeNode> L = new LinkedList<BiTreeNode>();//声明队列
L.offer(T); //根结点入队列
while(!L.isEmpty()) {
T=(BiTreeNode)L.poll();
++count; //结点数+1
if(T.lchild!=null)
L.offer(T.lchild); //左孩子非空,入队列
if(T.rchild!=null)
L.offer(T.rchild); //右孩子非空,入队列
}
}
return count;
}
//统计二叉树中结点个数的递归算法
public int countNode1(BiTreeNode T) {
if(T==null) {
return 0;
}else {
return countNode(T.lchild)+countNode(T.rchild)+1;
}
}
}
测试类:
package tree;
public class TestBiTree {
public BiTree createBiTree() {
BiTreeNode d=new BiTreeNode('D');
BiTreeNode g=new BiTreeNode('G');
BiTreeNode h=new BiTreeNode('H');
BiTreeNode e=new BiTreeNode('E',g,null);
BiTreeNode b=new BiTreeNode('B',d,e);
BiTreeNode f=new BiTreeNode('F',null,h);
BiTreeNode c=new BiTreeNode('C',f,null);
BiTreeNode a=new BiTreeNode('A',b,c);
return new BiTree(a);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestBiTree testBiTree =new TestBiTree();
BiTree biTree=testBiTree.createBiTree();
BiTreeNode root=biTree.root;
System.out.println("二叉树中结点个数是(先根遍历):");
System.out.println(biTree.countNode(root));
System.out.println("二叉树中结点个数是(层次遍历):");
System.out.println(biTree.countNodeLevel(root));
System.out.println("二叉树中结点个数是(递归):");
System.out.println(biTree.countNode1(root));
}
}