动手刷LeetCode-求二叉树的最大深度

二叉树的最大深度


求解最二叉树的最大深度

知识点

对于树的操作:深度优先搜索:DFS,宽度优先搜素:BFS;树的很多问题都是有这两种方法即可解决;
队列和栈的算法;

解题思路

解法一:递归法
递归思想:树的深度,此时可以直接结束递归函数,并返回空节点的深度为 0。

在递归算法中,递归函数的设计非常重要,首先我们要先明确该函数的作用,然后再确定何时结束与何时调用该函数。

**明确函数作用
该函数的作用用一句话概括就是:计算节点的最大深度。

函数输入:确定的节点
函数输出:该节点的最大深度
何时结束
当输入的节点为空节点时,我们无需继续计算其子树的深度,此时可以直接结束递归函数,并返回空节点的深度为 0。

何时调用
当输入节点为非空节点时,该节点的深度取决于其左右子树的深度,即:

maxDepth(root) = max(maxDepth(root.left), maxDepth(root.right)) + 1
此时需要进行函数的递归调用。

** 但是递归函数占用大量的参数栈占空间,99%的递归算法可以转化为用栈的非递归算法**

class Solution {
public:
    int maxDepth(TreeNode* root) { // think of it in a precious way
        if(root==NULL){
            return 0;
        }
        int ans;
        if(root!=NULL){
             ans= maxDepth2(root->left,root->right);
        }
       
        return ans;
        
    }

// we can define another pvivate function 
// left tree and rigtht tree
private:
    int maxDepth2(TreeNode* pl,TreeNode* pr){
        static int count=1; // define count;
        

        if(pl==NULL && pr!=NULL){
            count++;
            maxDepth2(pr->left,pr->right);
        }
        if(pl!=NULL && pr==NULL){
            count++;
            maxDepth2(pl->left,pl->right);
        }
        if(pl!=NULL && pr!=NULL){
            count++;
            count=max(maxDepth2(pl->left,pl->right) ,maxDepth2(pr->left,pr->right));
        }
        
        return count;
    }
};
// 结果是错的,我也不知道错在什么地方了;

小结

热爱你正在做的事情——编程。这份工作高薪,并且极具成就感;获得成就感的前提是,努力提高自己的技术,真正做出点东西来。不断花时间练习才能得到正反馈,形成良性循环;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值