【数据结构】计算二叉树中结点个数的3种实现算法

本文介绍了计算二叉树节点数量的三种方法:先根遍历、层次遍历和递归遍历。通过详细的步骤阐述了每种遍历策略,帮助理解如何遍历二叉树并统计节点数目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先根遍历

	//统计二叉树中结点个数的算法 (先根遍历)
	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));
	}
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值