1、二叉树的最大深度
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数
可以使用前序遍历求深度,后序遍历求的就是高度
- 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
- 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
递归遍历的规则是一样的,三步
1.确定递归函数的参数和返回值
int getdepth(TreeNode* node)
2.确定终止条件
if(node==NULL) return 0;
3.确定单层递归的逻辑
int leftdepth=getdepth(node->left);//左
int rightdepth=getdepth(node->right);//右
int depth=1+max(leftdepth,rightdepth);
return depth;
分别求得root的左右子树的最大深度,一层一层递归;
迭代法二刷再学习
2、二叉树的最小深度
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意最小深度不是说没下一层就说明最小深度为1,而是距离最近叶子节点(左右孩子都为空才是叶子节点)
三步走:
1.确定递归函数的参数和返回值
int getMindepth(TreeNode* node)
2.确定终止条件
if(node==NULL) return 0;
3.确定单层递归的逻辑
int leftDepth=getMindepth(node->left);
int rightDepth=getMindepth(node->right);
//当一个左子树为空,右子树不为空时,这不是最低点
if(node->left==NULL&&node->right!=NULL){
return 1+rightDepth;
}
//当一个右子树为空,左字数不为空时,这也不是最低点
if(node->right==NULL&&node->left!=NULL)
{
return 1+leftDepth;
}
//剩余情况,左右子树都为空才是结束
int result=1+min(leftDepth,rightDepth);
return result;
3、完全二叉树的节点个数
递归法就是在遍历的基础上加上一个计数
后序遍历
1.确定递归的参数和返回值
int getNodeSum(TreeNode* node)
2.确定结束条件
if(node==NULL) return 0;
3.确定单层递归的逻辑
int leftNum=getNodeSum(node->left);
int rightNum=getNodeSum(node->right);
int treeNum=leftNum+rightNum+1;
return treeNum;
总结:用递归的方法都是在遍历的基础上增加判断或者计数
迭代的方法而二刷的时候看