LeetCode題解-104-Maximum Depth of Binary Tree

儘管寫LeetCode解答主要是爲了自己整理思路,但是如果對您也正好有幫助,請點個贊給菜鳥一點鼓勵吧 :-)

原題



解法分析

解法1使用遞歸法;
解法2參考了別人的思路,爲迭代法,類似於廣度優先搜索;
自己的迭代法使用了後序遍歷來統計樹的深度,較爲繁瑣,沒有參考意義。

解法1

解法分析

遞歸計算左子樹的深度與右子樹的深度,那麼樹的深度爲兩個子樹中深度的較大值+1。

代碼

public class Solution104_iterator {
    public int maxDepth(TreeNode root) {
        if (root == null)
            return 0;

        Deque<TreeNode> stack = new LinkedList<TreeNode>();

        stack.push(root);
        int count = 0;

        while (!stack.isEmpty()) {
            int size = stack.size();
            while (size-- > 0) {
                TreeNode cur = stack.pop();
                if (cur.left != null)
                    stack.addLast(cur.left);
                if (cur.right != null)
                    stack.addLast(cur.right);
            }
            count++;

        }
        return count;
    }
}


解法2

參考了https://discuss.leetcode.com/topic/4087/simple-solution-using-java/4

解法分析

類似於廣度優先搜索,使用一個隊列。隊列初始爲空,每次都會加入第i層的所有節點,如果隊列不爲空,說明該層有節點,因此count++;同時,刪除第i層所有的節點,加入第i+1層的所有節點,繼續進行判斷。如果隊列爲空,說明樹已經到底,結束。、

圖解

以下圖所示的樹爲例,深度爲3層。


代碼

public class Solution104_iterator {
    public int maxDepth(TreeNode root) {
        if (root == null)
            return 0;

        Deque<TreeNode> stack = new LinkedList<TreeNode>();

        stack.push(root);
        int count = 0;

        while (!stack.isEmpty()) {
            int size = stack.size();
            while (size-- > 0) {
                TreeNode cur = stack.pop();
                if (cur.left != null)
                    stack.addLast(cur.left);
                if (cur.right != null)
                    stack.addLast(cur.right);
            }
            count++;

        }
        return count;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章