前言
1、两个堆栈实现。一个堆栈存放当前节点指针,一个堆栈存放层数整型,使用DSP遍历二叉树。
2、递归。
3、待优化。
题目
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
返回它的最大深度 3 。
实现方法
一、两个堆栈实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
stack<TreeNode*> s;
stack<int> c;
int maxLevel=1;
s.push(root);
c.push(1);
while(!s.empty()){
TreeNode* current=s.top();
s.pop();
int count=c.top();
c.pop();
maxLevel=max(maxLevel,count);
if(current->left){
s.push(current->left);
c.push(count+1);
}
if(current->right){
s.push(current->right);
c.push(count+1);
}
}
return maxLevel;
}
};
二、递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root) return 0;
int leftMax=maxDepth(root->left);
int rightMax=maxDepth(root->right);
return max(leftMax,rightMax)+1;
}
};