二叉树--高度,宽度和节点个数

本文介绍了二叉树的高度、宽度和节点个数的计算方法,包括递归和非递归解决方案。针对二叉树的高度,提供了两种算法:递归求解和层次遍历。二叉树的宽度通过层次遍历获取最大层数。计算节点个数,可以通过前中后序遍历结合二叉树的递归性质来实现。

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

对于二叉树的算法问题,我们可以根据二叉树本身的定义的递归性质求解,或者使用对二叉树的遍历算法进行求解.下面我们看几个关于二叉树高度,宽度和节点个数的算法


一,求二叉树的高度

1,使用二叉树递归定义的性质求二叉树的高度

如果根节点为空,返回0
否则  
递归求左子树高度  getHeightRecurse(root.left)
递归求右子树高度  getHeightRecurse(root.right)
返回左右子树最大的高度加1


对应代码是:

public int getHeightRecurse(TreeNode<T> root) {
		if (root == null) {
			return 0;
		}

		int leftHeight = getHeightRecurse(root.left);
		int rightHeight = getHeightRecurse(root.right);
		return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}


2,利用层遍历求得树的高度

求得二叉树的最大的层次数,也就是二叉树的高度

代码如下:

/**
	 * 通过层次遍历来求得树的高度,每增加一层高度增加1
	 * 
	 * @param root
	 *            树的根节点
	 * @return 树的高度
	 */
	public int getHeightByLevel(TreeNode<T> root) {
		if (root == null) {
			return 0;
		}

		LinkedList<TreeNode<T>> queue = new LinkedList<TreeNode<T>>();
		int front = 0, rear = 1, last = 1;
		int height = 0;
		queue.add(root);
		TreeNode<T> node = null;

		while (front != rear) {
			node = queue.get(front);
			if (node.left != null) {
				queue.add(node.left);
				rear++;
			}

			if (node.right != null) {
				queue.add(node.right);
				rear++;
			}

			front++;
			// 本层节点遍历完毕
			if (front == last) {
				last = rear;
				height++;
			}
		}

		return height;
	}

3,利用后序遍历的性质

当我们使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值