【LeetCode练习题】Maximum Depth of Binary Tree
Maximum Depth of Binary Tree
Given a binary tree, find its maximum depth.
The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
求二叉树的高度,即从根节点到叶节点上所有节点的数量。
解题思路:
这题是难度系数1,频率1的题目……用到的知识点是二叉树DFS(深度遍历)。
一个计数变量count,一个记录最大值变量max。
深度遍历的时候,遍历到的节点分三种情况:
- 叶节点。此时比较max和count的大小,将较大的那个赋值给max。
- 非叶节点,且有左节点无右节点,继续遍历其左节点,从左节点返回时要将count减1. 右节点不遍历了。
- 非叶节点,且有右节点无左节点,继续遍历其右节点,从右节点返回时要将count减1. 左节点不便利了。
max即为所求的最大深度。
代码如下:
class Solution { public: int maxDepth(TreeNode *root) { int count = 0,max = 0; depth(root,count,max); return max; } void depth(TreeNode *root,int &count,int &max){ if(root){ if(!root->left && !root->right){ count++; if(max < count) max = count; } else{ count++; if(root->left){ depth(root->left,count,max); count--; } if(root->right){ depth(root->right,count,max); count--; } } } } };
难怪难度系数是1,可以简单成这个样子:
class Solution { public: int maxDepth(TreeNode *root) { if(root == NULL) return 0; int l = maxDepth(root->left); int r = maxDepth(root->right); return l > r ? l + 1 : r + 1; } };
posted on 2014-04-13 15:58 Allen Blue 阅读(198) 评论(0) 编辑 收藏 举报