平衡二叉树的java实现

本文介绍了如何在Java中实现平衡二叉树,特别强调了在不依赖子树高度属性的情况下计算平衡因子的方法,旨在帮助读者深入理解平衡二叉树的构建过程。
摘要由CSDN通过智能技术生成
平衡二叉树求解步骤:


(1)插入节点
(2)找出不平衡因子,在插入过程中找到不平衡因子
(3)旋转,根据不平衡因子判断旋转方式
(4)生成新的平衡二叉树


在求解过程中,最重要步骤详解:


找出不平衡因子(也就是左右子树的高度差值为2或-2的情况)


方法1步骤:
a.节点中添加两个属性,左子树高度、右子树高度。
b.插入节点
c.返回的过程中动态的计算插入节点过程中经过的节点的左子树或右子树的高度。并计算各个节点的因子.
d.当节点因子为0时,返回过程中停止计算树的高度。当节点因子为2或-2时,即为不平衡因子,进行旋转
e.所有的旋转分为四种类型:LL顺时针旋转, RR逆时针旋转,  LR先逆时针、然后顺时针,RL先顺时针在逆时针,旋转过程中调整各个节点的左右子树高度
f.旋转完成周调整,父节点的对应的左子树或者右子树的高度


这个方法通过给节点添加左右子树高度属性的方法,优点:节点的左右子树,只需要管理自己的高度,分而自治减少复杂性。代码中实现的是这个方法


package ProductCosume;

import java.util.Queue;
import java.util.Stack;

public class BinaryTreeTest {

	enum BalanceFactory {
		LeftFactory(1), RightFactory(-1), EqualFacotry(0), LeftLossBalanceFactory(
				2), RightLossBalanceFactory(-2), InvalideFactory(-3);
		int value = 0;

		private BalanceFactory(int value) {
			this.value = value;
		}
	}

	// 节点
	static class Node {

		public Node(int value) {
			key = value;
		}

		int key;
		private BalanceFactory af = BalanceFactory.EqualFacotry;

		Node leftNode = null;
		Node rightNode = null;
		Node parentNode = null;

		int leftNodeHeight = 0;
		int rightNodeHeight = 0;

		public int getNodeHeight() {
			return leftNodeHeight > rightNodeHeight ? leftNodeHeight
					: ri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值