(二十九)二叉树的最大深度

本文探讨了二叉树的深度和高度概念,指出在力扣标准中根节点深度和叶子节点高度为1。介绍了通过前序遍历计算深度,后序遍历计算高度的方法,并提到了递归和层序遍历的应用。
摘要由CSDN通过智能技术生成

高度与深度

在这里插入图片描述

  • 高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数。
  • 某节点的深度是指从根节点到该节点的最长简单路径边的条数,而高度是指从该节点到叶子节点的最长简单路径边的条数。
  • 这里边的条数是规定根节点的深度和叶子节点的高度是0;力扣中认为根节点的深度和叶子节点的高度为1,故下面求解同力扣.
  • 所以树的深度和高度是相等的,而对其他节点来说深度和高度不一定相等。
  • 使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度

【递归】

int maxDepth(TreeNode* node){
	if(node == NULL){
		return 0;	
	}
	int leftDepth = maxDepth(node->left);
	int rightDepth = maxDepth(node->right);
	return 1 + max(leftDepth,rightDepth);
	/*
	return 1 + max(maxDepth(node->left),maxDepth(node->right));
	*/
}

【利用层序遍历】

int maxDepth2(TreeNode* node){
    if(node == NULL)
        return depth;
    int depth = 1;
    queue<TreeNode*> que;
    que.push(node);
    TreeNode* last = node,*nlast = NULL,*cur = node;
    
    while(!que.empty()){
        TreeNode* cur = que.front();
        //cout << cur->value << " ";
        que.pop();

        if(cur->left != NULL){
            que.push(cur->left);
            nlast = cur->left;
        }
        if(cur->right != NULL){
            que.push(cur->right);
            nlast = cur->right;
        }
        if(cur == last &&!que.empty()){
            //cout <<"\nlevel " << ++depth << endl;
            depth++;
            last = nlast;
        }
    }
    return depth;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值