[二叉樹專題]求二叉樹的高度(深度)

/* 遞歸解法 O(n)
1。若是二叉樹爲null,則二叉樹的深度爲0;
2. 若是二叉樹不爲null,則二叉樹的深度=max(左子樹的深度,右子樹的深度)+1;
public static int getDepthRec(TreeNode root){
    if(root == null){
        return 0;
    }
    
    int leftDepth = getDepthRec(root.left);
    int rightDepth = getDepthRec(root.right);
    return Math.max(leftDepth,rightDepth)+1;
}
/* 迭代解法O(n)
基本思想同LevelOrderTravelsal,仍是用一個Queue。
*/
public static int getDepth(TreeNode root){
    if(root == null){
        return 0;
    }
    
    int depth = 0;//深度
    int currentLevelNodes = 1;//當前level,node的數量
    int nextLevelNodes = 0;//下一層,node的數量
    
    Queue<TreeNode> queue = new LinkedList<TreeNode>();
    queue.add(root);
    while(!queue.isEmpty()){
        TreeNode cur = queue.remove();//從隊頭的位置移除
        currentLevelNodes--;//減小當前level node數量
        if(cur.left != null)(    //若是有左孩子,則加到隊尾
            queue.add(cur.left);
            nextLevelNodes++;//並增長下一層Level Node 的數量
        )
        if(cur.right != null){//若是有右孩子,加到隊尾
            queue.add(cur.right);
            nextLevelNodes++;
        }
        
        if(currentLevelNodes == 0){//已經遍歷完當前層的全部節點
            depth ++; //增長高度
            currentLevelNodes = nextLevelNodes;//初始化下一層
            nextLevelNodes = 0;
        }
    }
    return depth;
}
相關文章
相關標籤/搜索