剑指offer-二叉树的深度
题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
解题思路
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 };