При работе с рекурсивными проблемами вы всегда должны обращать внимание на базовые случаи.В этой программе есть только один базовый случай: пустое дерево, которое имеет тривиально достижимую высоту 1 и по определению сбалансировано.Теперь предположим, что дерево не сбалансировано, если его самая высокая половина имеет высоту более 1 плюс высоту его второй половины (то есть его самая высокая половина выше как минимум на два уровня), или если одно из его поддеревьев не сбалансировано, томы получаем рекурсивный способ вычисления этого.
Сначала вернем 0 и True для тривиально сбалансированного (пустого) дерева.Мы получили наш базовый случай.
Во-вторых, если любая из половин не сбалансирована, то дерево не сбалансировано.Это проверяется для каждого поддерева, и, таким образом, рекурсия будет продолжаться до тех пор, пока не будет найдено пустое дерево, откуда оно начнет возвращаться (представьте себе случай дерева только с одним уровнем, одним узлом. Представьте, как будет выполняться код, и вы, вероятно,быть в состоянии экстраполировать оттуда).
Наконец, если каждое поддерево сбалансировано (это третий случай, так как мы уже продвинулись так далеко в программу), тогда единственный способ, которым дерево не сбалансировано, - это если один изего поддеревья выше других более чем на один уровень.Мы просто проверяем это и возвращаем противоположное значение.
Я надеюсь, что это помогло вам понять, не стесняйтесь задавать мне любые другие вопросы в противном случае!