day16-二叉树3

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;

总结:用递归的方法都是在遍历的基础上增加判断或者计数

迭代的方法而二刷的时候看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值