二叉樹的最大深度,即為二叉樹的層數,開始的想法是遍歷左子樹和遍歷右子樹,返回記錄的最大值。這樣明顯是有漏洞的,如果最右的右子樹有左孩子或者左子樹有右孩子,結果就是不正確的。
使用遞迴的方法,整樹的最大深度為左孩子樹的最大深度或者右孩子樹的最大深度。遞迴結束的條件是,當乙個結點的左右子樹都為空時,返回1結束。核心思想是dfs深度優先遍歷演算法。
#include
using namespace std;
class solution
};更加簡潔的**:
#include
using namespace std;
class solution
};深度優先搜尋迭代方法,二叉樹的中序遍歷,始終尋找左子樹,到頭後在尋找右子樹。使用棧,優先遍歷左子樹,遍歷當null時,右拐遍歷右子樹,記錄右拐時的結點資訊。
#include
#include
using namespace std;
class solution
p=s.top().first;//若左邊遍歷到頭,準備右拐。右拐之前,記錄右拐點的基本資訊
deep=s.top().second;
maxdepth=max(deep,maxdepth);
s.pop();
p=p->right;
}return maxdepth;
}};廣度優先遍歷,實際實現就是二叉樹的層序遍歷。使用佇列。每一次循佇列中的元素是每一層的所有元素,內層for迴圈即判斷某一層所有結點有沒有左右子樹,如果有則尾插入佇列。for迴圈的結束條件是某一層結點的個數,不能在for迴圈中圖簡單直接寫i<=q.size(),因為在for迴圈語句中,有元素出佇列,所以q.size()時刻變化。此處i的含義是每一層的結點個數,無所謂下標,所以從1開始好理解。
#include
#include
using namespace std;
class solution }
return deep; }
};
LeetCode 二叉樹最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 解題關鍵 明白二叉樹基本操作。definition for a bin...
二叉樹最大深度 leetcode
這個題目開始要想是用遞迴,但是遞迴的形式,沒有想對。直接判斷left right 比較麻煩,不如在遞迴呼叫的時候判斷root是否為空。public class solution int led maxdepth root.left int rid maxdepth root.right return...
LeetCode 二叉樹的最大深度
給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回它的最大深度 3 思路 遞迴,分別求左右兩顆子樹的最大深度,一直求到把所有的葉子節點遍...