maximum depth of binary tree c++
【题目】
Maximum Depth of Binary Tree
Total Accepted: 5260 Total Submissions: 11532My Submissions
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.
【代码】
【递归】
时间复杂度为O(n) 空间复杂度为O(logn)
【队列】
【栈】
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
;
stack<treenode*> S;
int
maxDepth =
0
;
TreeNode *prev = NULL;
S.push(root);
while
(!S.empty()) {
TreeNode *curr = S.top();
if
(prev == NULL || prev->left == curr || prev->right == curr) {
if
(curr->left)
S.push(curr->left);
else
if
(curr->right)
S.push(curr->right);
}
else
if
(curr->left == prev) {
if
(curr->right)
S.push(curr->right);
}
else
{
S.pop();
}
prev = curr;
if
(S.size() > maxDepth)
maxDepth = S.size();
}
return
maxDepth;
}
};
【测试】
#include <iostream>
#include <malloc.h>
#include <stdio.h>
using namespace std;
typedef struct TreeNode{
int
val;
TreeNode *left;
TreeNode *right;
TreeNode(
int
x) : val(x), left(NULL), right(NULL) {}
}TreeNode,*BiTree;
//按先序序列创建二叉树
int
CreateBiTree(BiTree &T){
int
data;
//按先序次序输入二叉树中结点的值,‘-1’表示空树
scanf(
"%d"
,&data);
if
(data == -
1
){
T = NULL;
}
else
{
T = (BiTree)malloc(sizeof(TreeNode));
//生成根结点
T->val = data;
//构造左子树
CreateBiTree(T->left);
//构造右子树
CreateBiTree(T->right);
}
return
0
;
}
//二叉树最大深度(递归)
int
maxDepth(TreeNode *root) {
if
(root == NULL){
return
0
;
}
int
left = maxDepth(root->left);
int
right = maxDepth(root->right);
return
1
+ max(left,right);
}
int
main() {
int
i,n;
BiTree T = NULL;
CreateBiTree(T);
printf(
"%d\n"
,maxDepth(T));
return
0
;
}