"Предложение пальца меча" -39. Сбалансированное двоичное дерево

1. Основные сведения об этом вопросе

дерево

2. Описание заголовка

Введите двоичное дерево, чтобы определить, является ли оно сбалансированным двоичным деревом.

Здесь нам нужно учитывать только его баланс, а не то, является ли это отсортированным двоичным деревом.

Сбалансированное двоичное дерево имеет следующие свойства: это пустое дерево или абсолютное значение разницы высот между его левым и правым поддеревьями не превышает 1, а левое и правое поддеревья являются сбалансированным двоичным деревом.

Например:

输入:
{1,2,3,4,5,6,7}

返回值:
true

3. Идеи решения проблем

Используйте обход после порядка: левое поддерево, правое поддерево, корневой узел, вы можете сначала рекурсивно перейти к конечному узлу, а затем в процессе отслеживания с возвратом, чтобы определить, выполняются ли условия.

4. Код

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

    public TreeNode(int val) {
    
    
        this.val = val;
    }
}
public class Solution {
    
    
    public boolean isBalanced_Solution(TreeNode root) {
    
    
        // 它是一棵空树,则是平衡的
        if (root == null) {
    
    
            return true;
        }
        int depth = getDepth(root);
        if (depth == -1) {
    
    
            return false;
        }
        return true;
    }

    /**
     * 返回当前节点的深度
     * @param root
     * @return
     */
    public int getDepth(TreeNode root) {
    
    
        // 叶节点深度为 0
        if (root == null) {
    
    
            return 0;
        }
        int left = getDepth(root.left);
        // 遍历过程中发现子树不平衡
        if (left == -1) {
    
    
            return -1;
        }
        int right = getDepth(root.right);
        // 遍历过程中发现子树不平衡
        if (right == -1) {
    
    
            return -1;
        }
        // 左右两个子树的高度差的绝对值超过 1,则不平衡
        if (Math.abs(left - right) > 1) {
    
    
            return -1;
        }
        // 返回当前节点的深度
        return left > right ? left + 1 : right + 1;
    }
}

рекомендация

отblog.csdn.net/bm1998/article/details/112797034