《程序员面试金典》

来源:互联网 发布:苹果电脑自带办公软件 编辑:程序博客网 时间:2024/04/27 23:36

4.1 检查二叉树是否平衡

代码实现
// 获取二叉树的树高度,判断二叉树是否平衡class TreeNode {    public int val = 0;    public TreeNode left = null;    public TreeNode right = null;}public class Solution {    // 获取树高度,用递归的方法:左、右子树的最大高度加一    public static int getHeight(TreeNode node) {        if (node == null) // 递归结束条件            return 0;        else // 左右子树的最大高度加一            return Math.max(getHeight(node.left), getHeight(node.right))+1;    }    // 递归判断树是否平衡:先判断当前节点是否平衡,平衡时再判断左右子树是否平衡    public static boolean isBalance(TreeNode node) {        if (node == null) // 递归结束条件            return true;        // 获取左右子树高度,判断当前节点是否平衡        int left = getHeight(node.left);        int right = getHeight(node.right);        if (Math.abs(left - right) > 1) // 递归结束条件            return false;        else            return isBalance(node.left) && isBalance(node.right);    }    // 改进方法,从根节点递归向下检查每棵子树的高度    public static boolean isBalance2(TreeNode root) {        if (checkHeight(root) == -1)            return false;        else            return true;    }    public static int checkHeight(TreeNode node) {        if (node == null)            return 0;        // 获取左子树高度,并判断是否平衡        int leftHeight = checkHeight(node.left);        if (leftHeight  == -1)            return -1;        // 获取右子树高度,并判断是否平衡        int rightHeight = checkHeight(node.right);        if (leftHeight  == -1)            return -1;        // 检查当前节点是否平衡        if (Math.abs(leftHeight - rightHeight) > 1)            return -1;        else            return Math.max(checkHeight(node.left), checkHeight(node.right)) + 1;    }}
0 0
原创粉丝点击