问题描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的距离。
递归解法:
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: An integer
*/
int maxDepth(TreeNode *root) {
if (NULL == root) {
return 0;
}
int left_depth = maxDepth(root->left);
int right_depth = maxDepth(root->right);
return max(left_depth, right_depth) + 1;
}
};
非递归(深度优先):
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: An integer
*/
int maxDepth(TreeNode *root) {
// write your code here
if (root==NULL){
return 0;
}
stack<TreeNode*> s;
bool flag[10000];
int max = 0, i = 0;
while (!s.empty()||root) {
if (root) {
s.push(root);
flag[i++] = 0;
root=root->left;
} else if(flag[i-1]==0) {
root = s.top()->right;
flag[i-1] = 1;
} else {
if (max<i){
max = i;
}
s.pop();
i--;
}
}
return max;
}
};
非递归(广度优先):
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: An integer
*/
int maxDepth(TreeNode *root) {
// write your code here
if (root==NULL){
return 0;
}
queue<TreeNode*> q;
q.push(root);
int max = 0;
while (!q.empty()) {
int size = q.size();
for (int i=0;i<size;i++){
root = q.front();
q.pop();
if(root->left){
q.push(root->left);
}
if (root->right){
q.push(root->right);
}
}
max++;
}
return max;
}
};