一、二叉树的深度与高度
1、二叉树的深度
对于二叉树中的某个节点,其深度是从根节点到该节点的最长简单路径所包含的节点个数,是从上面向下面数的。因此访问某个节点的深度要使用先序遍历
2、二叉树的高度
对于二叉树中的某个节点其高度是从叶子节点到该节点的最长简单路径包含的节点个数,是从下面向上面数的。因此访问某个节点的高度需要使用后续遍历
3、二叉树的深度与高度辨析
每层节点的深度和高度如图所示:
4、二叉树的深度与高度的联系
一个二叉树根节点的高度就是这个二叉树的最大深度
二、二叉树的最大深度
- 二叉树的最大深度
二叉树的最大深度可以通过递归法,层次遍历和深度优先遍历实现,但是最简单最容易的就是递归法。
1、递归法
递归法利用了一个二叉树根节点的高度就是这个二叉树的最大深度这一特性,通过求跟根节点的高度求取二叉树的深度。
1)确定递归三要素
- 递归函数的返回值和参数:返回值为当前节点的最大深度,参数为当前节点
- 递归函数的单层逻辑:当前节点的最大深度 = 1 + 左子树或右子树的最大深度
- 递归函数的终止条件:当前节点为空时,当前节点最大深度为0
2)递归方法代码(其实就是求根节点高度的代码)
class Solution {
public:
//递归参数及返回值
int maxDepth(TreeNode* root) {
//递归终止条件
if(root == nullptr) return 0;
//单层递归逻辑
int leftdepth = maxDepth(root->left); /左
int rightdepth = maxDepth(root->right); /右
return 1 + max(leftdepth, rightdepth); /中
}
};
2、层次遍历
层次遍历的思路很简单,每遍历一层,就让maxdepth + 1,当遍历终止时,返回maxdepth即可。
1)层次遍历代码
class Solution {
public:
int maxDepth(TreeNode* root) {
queue<TreeNode*> que;
int maxdepth = 0;
if(root == nullptr) return maxdepth;
que.push(root);
while(!que.empty