给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : left(NULL), right(NULL) {}
};
int maxDepthDFS(TreeNode* root) {
if(root == nullptr)
return 0;
return max(maxDepthDFS(root->left), maxDepthDFS(root->right)) + 1;
}
int maxDepthBFS(TreeNode* root) {
if(root==nullptr) {
return 0;
}
vector<TreeNode*> c;
int res = 0;
c.push_back(root);
vector<TreeNode *> tmp;
while(c.size()) {
for(auto node:c) {
if(node->left)
tmp.push_back(node->left);
if(node->right) {
tmp.push_back(node->right);
}
}
c = tmp;
res += 1;
tmp.clear();
}
return res;
}
void create_tree(TreeNode* &tree, vector<string> vec, int len, int index)
{
if (index >= len || vec[index]=="null")
return;
tree = new TreeNode;
tree->val = stoi(vec[index]);
create_tree(tree->left, vec, len, 2 * index + 1);
create_tree(tree->right, vec, len, 2 * index + 2);
}
void clear_tree(TreeNode* &tree) {
if(tree==nullptr) {
return;
}
clear_tree(tree->left);
clear_tree(tree->right);
delete tree;
tree = nullptr;
}
int main() {
vector<string> vec = {"3", "9", "20", "null", "null", "15", "7"};
TreeNode* tree;
create_tree(tree, vec, vec.size(), 0);
cout << maxDepthDFS(tree);
cout << maxDepthBFS(tree);
clear_tree(tree);
system("pause");
return 0;
}