剑指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 };

 

posted @ 2018-04-03 12:47  FlyingWarrior  阅读(220)  评论(0编辑  收藏  举报