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.
Note: A leaf is a node with no children.
Example:
Given binary tree [3,9,20,null,null,15,7],
return its depth = 3.
C++
//https://leetcode.com/problems/maximum-depth-of-binary-tree/
#include<iostream>
using namespace std;
struct TreeNode {
//为了简化,节点数据用整型
int data;
//指向当前节点左儿子和右儿子的指针
TreeNode *left, *right;
};
TreeNode* createTree(){
TreeNode* root;
int i;
cin >> i;
if(i!=0)
{
root = new TreeNode;
root->data = i;
cout << "input " << i << " left children: ";
root->left = createTree();
cout << "input " << i << " right children: ";
root->right = createTree();
}
else{
root = NULL;
}
return root;
}
void showTree(TreeNode* root){ //只是用前序遍历显示一下树中的数而已
if(root != NULL){
cout << root->data << " ";
showTree(root->left);
showTree(root->right);
}
}
class Solution {
public:
int maxDepth(TreeNode* root) {
return root == NULL ? 0 : max(maxDepth(root -> left), maxDepth(root -> right)) + 1;
}
};
int main(){
TreeNode *root;
root = createTree();
showTree(root);
cout << endl;
Solution S;
cout << S.maxDepth(root) << endl;
return 0;
}
以上的求最深的方法差不多是最简洁的语句了,只用了一条语句。也可以用下面这个写法,跟上面是同个意思:
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL)
return 0;
int left_deepth = maxDepth(root->left)+1;
int right_deepth = maxDepth(root->right)+1;
return left_deepth>right_deepth ? left_deepth : right_deepth;
}
};
还有一种用队列的方法,思想就是把二叉树的每层的节点每次放到一个空队列中,直到到最底层的叶子节点:
class Solution {
public:
int maxDepth(TreeNode *root)
{
if(root == NULL)
return 0;
int res = 0;
queue<TreeNode *> q;
q.push(root);
while(!q.empty())
{
++ res;
for(int i = 0, n = q.size(); i < n; ++ i)
{
TreeNode *p = q.front();
q.pop();
if(p -> left != NULL)
q.push(p -> left);
if(p -> right != NULL)
q.push(p -> right);
}
}
return res;
}
};
参考网址(来自leetcode上的Discuss版块):https://leetcode.com/problems/maximum-depth-of-binary-tree/discuss/34207/My-code-of-C%2B%2B-Depth-first-search-and-Breadth-first-search 感谢!