题目(leecode T104):
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
递归法:
递归法首先将根节点作为参数传入,随后每一轮传入当前节点的左右孩子节点,并且每一轮取左右树深度的最大值加一作为当前的高度。当节点为空时递归调用结束。
题解:
class Solution {
public:
int getdepth(TreeNode* node) {
if (node == NULL) return 0;
int leftdepth = getdepth(node->left); // 左
int rightdepth = getdepth(node->right); // 右
int depth = 1 + max(leftdepth, rightdepth); // 中
return depth;
}
int maxDepth(TreeNode* root) {
return getdepth(root);
}
};
迭代法:
本人更喜欢迭代法,本题求二叉树的深度。很适合用层序遍历的方法,每遍历一层,深度就加一。即在将下一层元素入队前将深度加一即可。
题解:
class Solution {
public:
int maxDepth(TreeNode* node) {
if(node == NULL) return 0;
int depth = 0;
queue<TreeNode*> que;
que.push(node);
while(!que.empty()){
int size = que.size();
depth++; //在此处深度加一
for(int i = 0; i<size; i++){
TreeNode* cur = que.front();
que.pop();
if(cur->left) que.push(cur->left);
if(cur->right) que.push(cur->right);
}
}
return depth;
}
};