2. Problem: Maximum Depth of Binary Tree
Problem Description: 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.
Step I: Ask Questions
Complete binary tree? how is the binary tree implemented? What is depth?
Step II: Describe approaches to the problem-->Algorithm-->Algorithm Analysis.
与上一题相似,我们也有recursive和iterative的解法。
http://www.geeksforgeeks.org/write-a-c-program-to-find-the-maximum-depth-or-height-of-a-tree/
Iterative的解法还是用BFS。这一次找在queue里面的最后一个元素的depth值。两种方法的代码如下:
class Solution {
public:
int maxDepth(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if( root == NULL ) return 0;
if( root->left == NULL && root->right == NULL ) return 1;
else
return 1 + max( maxDepth( root->left ), maxDepth( root->right ) );
}
};
class Solution {
public:
struct Node{
TreeNode *root;
int depth;
Node(TreeNode* n, int d):depth(d){
root = n;
}
};
int maxDepth(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if( root==NULL ) return 0;
queue<Node> q;
q.push(Node( root, 1));
int maxDepth = 1;
while( !q.empty() )
{
Node u = q.front();
q.pop();
if( u.root->left )
q.push( Node(u.root->left, u.depth+1));
if( u.root->right )
q.push( Node(u.root->right, u.depth+1));
if( u.root->left==NULL && u.root->right == NULL)
{
if( maxDepth < u.depth )
maxDepth = u.depth;
}
}
return maxDepth;
}
};