//leetcode definition
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
深度(Depth)-递归 (Recursive) 方法:
int maxDepth(TreeNode *root)
{
if(NULL == root){
return 0;
}
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
深度(Depth)-非递归 (Non-Recursive) 方法:
<pre name="code" class="cpp">//BFS with queue as node buffer
int maxDepth(TreeNode *root) {
int treeDepth(0);
if(NULL == root){
return treeDepth;
}
std::queue<TreeNode*> bufferQueue;
bufferQueue.push(root);
TreeNode *p(NULL);
while(!bufferQueue.empty()){
int n = bufferQueue.size();
for(int i = 0; i != n; ++i){
p = bufferQueue.front();
if(NULL != p->left) bufferQueue.push(p->left);
if(NULL != p->right) bufferQueue.push(p->right);
bufferQueue.pop();
}
++treeDepth;
}
return treeDepth;
}
//Leaf Node Count
int leafCount( TreeNode *root ) {
if ( root == null )
return 0;
else if ( (root->left != null) || (root->right != null) )
return (leafCount(root.left) +
leafCount(root.right));
else
return 1;
}