劍指offer-二叉樹的深度
阿新 • • 發佈:2018-04-03
繼續 輸入 結點 解題思路 gpo post -i bject 初始
題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度為樹的深度。解題思路
max_dep保存最大深度,cur_dep保存當前遍歷節點的深度,均初始化為0。利用前序遍歷的思想,每次訪問到一個節點,先對cur_dep加1,若當前節點為葉子結點,那麽比較cur_dep與max_dep,若cur_dep更大則更新max_dep為當前節點深度。遍歷完當前節點的左右子節點之後,對cur_dep減1,回溯到父節點繼續遍歷右子節點。當遍歷完整棵樹時,max_dep中保存的便是最大深度。
代碼
1 /* 2 struct TreeNode {3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class Solution { 11 public: 12 int max_dep = 0; 13 int cur_dep = 0; 14 int TreeDepth(TreeNode* pRoot) 15 { 16 if(pRoot != NULL){ 17 cur_dep++; 18 if(pRoot->left) 19 TreeDepth(pRoot->left); 20 if(pRoot->right) 21 TreeDepth(pRoot->right); 22 if(pRoot->left == NULL&&pRoot->right == NULL) 23 if(cur_dep > max_dep) 24 max_dep = cur_dep; 25 cur_dep--; 26 return max_dep; 27 } 28 return max_dep; 29 } 30 };
劍指offer-二叉樹的深度