二叉树之判断平衡二叉树

老子叫甜甜 提交于 2019-12-22 09:44:30

AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。

平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

如何判断一棵树是平衡二叉树?
最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/

public class Solution {
	private boolean flag = true;
	public boolean is_Balance(TreeNode root) {  
		getDepth(root);
		return flag;		
	}
	public int getDepth(TreeNode root) {
		if(root == null) return 0;
		int left = getDepth(root.left);
		int right = getDepth(root.right);
		int temp = left - right;
		// 判断左右子树的高度差
		if(temp > 1 || temp < -1) 
			flag = false;
		return left > right ? left + 1 : right + 1;
	}

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!