104. 二叉树的最大深度
2019-06-15 本文已影响1人
046ef6b0df68
文|Seraph
01 | 问题
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
02 |解题
初解:
DFS递归求,二叉树的最大深度=子树最大深度(左子树与右子树中最大深度)+1。
/**
* 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==nullptr)
return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
终解:
迭代方法解题,本来想用pair作为stack存储元素的,但是不知道为什么总是错,结果还是老实得用结构体代替了。整体思路就是用stack缓存元素,广度遍历二叉树,每遍历到当前点,计算出该节点所在层数。
struct NodeInfo{
int iDepth;
TreeNode *tn;
};
class Solution {
public:
int maxDepth(TreeNode* root) {
stack<NodeInfo> st;
if(root==nullptr)
return 0;
NodeInfo ni={1, root};
st.push(ni);
int depth=0;
while(!st.empty())
{
NodeInfo p = st.top();
st.pop();
if(p.tn)
{
depth = max(depth, p.iDepth);
NodeInfo temp={p.iDepth+1, p.tn->left};
st.push(temp);
temp.tn = p.tn->right;
st.push(temp);
}
}
return depth;
}
};
03 | 积累知识点
- 利用递归思路清晰,但效率低一些,容易爆栈。
- 注意pair的使用。
官网链接 Leetcode No.104