1.タイトル
二分木を入力して、二分木が平衡二分木であるかどうかを判別します。
ここでは、それがソートされた二分木であるかどうかではなく、そのバランスを考慮する必要があるだけです。
2、分析とコード
1.深さを記録します
(1)考える
二分木のノードの左右のサブツリーの差が1以下の場合、それは平衡二分木です。
各ノードの深さを記録することで、再帰の繰り返しを回避できます。さらに、ノードごとに、その左右のサブツリーの深さを最初に記録し、バランスが取れているかどうかを記録してから、ノード自体の深さを計算できます。このプロセスの特性に応じて、ポストオーダートラバーサルの方法を選択できます。
(2)コード
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return TreeDepth(root) == -1 ? false : true;
}
public int TreeDepth(TreeNode root) {
if (root == null)
return 0;
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
if (left == -1 || right == -1 || left - right > 1 || right - left > 1)
return -1;
return Math.max(left, right) + 1;
}
}
(3)結果
実行時間:11ミリ秒、9440kのメモリを占有します。
3、その他
何もありません。