155 二叉樹的最小深度
阿新 • • 發佈:2018-06-09
get 廣度優先 mark lintcode blank 遇到 廣度優先搜索 lap ear
因此,當發現當前處理的節點有單個孩子是空時,返回一個極大值INT_MAX,防止其幹擾結果。轉自此文
原題網址:https://www.lintcode.com/problem/minimum-depth-of-binary-tree/description
描述
給定一個二叉樹,找出其最小深度。
二叉樹的最小深度為根節點到最近葉子節點的距離。 您在真實的面試中是否遇到過這個題?樣例
給出一棵如下的二叉樹:
1
/ \
2 3
/ \
4 5
這個二叉樹的最小深度為 2
標簽 二叉樹 Depth-first Search(DFS) 思路:可參照二叉樹的最大深度一題。 PS:深度優先搜索上遞歸。二叉樹與遞歸的題真的很容易懵比,要多練練。 最小深度與最大深度的區別是,返回左右子樹深度時,二叉樹的深度必須是根結點到葉子結點的距離,所以不能單純的比較左右子樹的遞歸結果返回較小值,因為對於只有單個孩子的節點,為空的孩子會返回0,但這個節點並非葉子節點,故返回的結果是錯誤的。因此,當發現當前處理的節點有單個孩子是空時,返回一個極大值INT_MAX,防止其幹擾結果。轉自此文
AC代碼:
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: The root of binary tree * @return: An integer*/ int minDepth(TreeNode * root) { // write your code here if (root==NULL) { return 0; } if (root->left==NULL&&root->right==NULL) { return 1; } int leftDepth=minDepth(root->left); int rightDepth=minDepth(root->right); leftDepth= (leftDepth==0?INT_MAX:leftDepth); rightDepth = (rightDepth==0?INT_MAX:rightDepth); return leftDepth<rightDepth?leftDepth+1:rightDepth+1; } };
最開始還想用廣度優先搜索一層層找下去,但深度值沒辦法計算,吐血
155 二叉樹的最小深度