文章優先發表在個人博客
http://www.xdx97.com/#/single?bid=055ce49b-feb8-6848-0811-e9f9267e52f7
胡扯:這個題做的時間還是比較長的,雖然只是一個簡單題。不過在做的過程中一直覺得自己可以做出來的。哈哈,最後代碼不是很好,只打敗百分之36的人,這也是想到的,畢竟寫了兩次DFS和遞歸,代碼不慢纔怪,但是比較好理解。
思路:
1、日常非空判斷。
2、先前序遍歷每一個節點 三種遍歷
3、在每一個節點的時候,再去遍歷以它爲根節點的左右長度。
4、比較它的左右長度,看看是否相差1,如果不是立馬終止程序,返回false
代碼:代碼中有一句註釋,你可以打開,上面標識着每一個節點的左右長度
class Solution {
boolean flag = true;
int max = 0;
void Preorder (TreeNode root){
max = 0;
dfs(root.left,1);
int tem = max;
max = 0;
dfs(root.right,1);
// System.out.println(root.val + " : " + tem + " "+max);
if (Math.abs(tem - max) > 1){
flag = false;
return;
}
if( root.left != null )
Preorder(root.left);
if( root.right != null )
Preorder(root.right);
}
void dfs (TreeNode root, int num){
if (root == null)
return;
if (num > max)
max = num;
if( root.left != null )
dfs(root.left,num + 1);
if( root.right != null )
dfs(root.right, num + 1);
}
public boolean isBalanced(TreeNode root) {
if( root == null )
return true;
Preorder(root);
return flag;
}
}