当前位置: 首页 > news >正文

剑指offer——树:二叉树的深度

1、单独函数递归,使用两个变量

注意把外面的变量传入要使用引用传递,否则外面变量值不变

递归函数内部,设一个变量存储当前的实时深度,存一个变量存储最终返回值

每递归一次,深度+1,如果当前深度比最终返回值大,则将当前深度的值给最终返回值

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:int TreeDepth(TreeNode* pRoot) {if(pRoot==nullptr){return 0;}int ans=0;func(pRoot,1,ans);return ans;}void func(TreeNode* pRoot,int deepth,int& ans){if(pRoot==nullptr)return ;if(deepth>ans){ans=deepth;}func(pRoot->left, deepth+1, ans);func(pRoot->right,deepth+1,ans);}
};

2、直接在原函数内递归处理

设左变量判断左子树的深度,设右变量判断右子树的深度,最终结果判断左子树和右子树的大小,返回大的值+1(根的深度为1)

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:int TreeDepth(TreeNode* pRoot) {if(pRoot==nullptr){return 0;}int leftDeepth=TreeDepth(pRoot->left);int rightDeepth=TreeDepth(pRoot->right);return max(leftDeepth,rightDeepth)+1;}
};

3、层序遍历

设一个队列,将节点都存入队列内,一层一层遍历,把每层的节点第一个先用新变量存储起来,然后将其弹出队列,将该节点的左右节点存入队列内

遍历过当层节点后,将层数+1

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:int TreeDepth(TreeNode* pRoot) {if(pRoot==nullptr){return 0;}//设一个队列,存储树内的节点queue<TreeNode*> q;//把根放入队列q.push(pRoot);//设ans变量记录当前深度int res=0;//当队列不为空时while(!q.empty()){//记录队列当前层的节点数int n=q.size();//遍历当前层的每个节点for(int i=0;i<n;i++){//设变量表示队列最前面的元素TreeNode* node=q.front();//弹出当前元素q.pop();//添加下一层的左右节点if(node->left!=nullptr)q.push(node->left);if(node->right!=nullptr)q.push(node->right);}//遍历结束,要进行下一层了,层次+1res++;}return res;}
};

http://www.dtcms.com/a/276136.html

相关文章:

  • 【C++小白逆袭】内存管理从崩溃到精通的秘籍
  • JVM 中“对象存活判定方法”全面解析
  • JVM的垃圾回收算法和多种GC算法
  • Git 相关的常见面试题及参考答案
  • 人工智能安全基础复习用:可解释性
  • 通过渐进蒸馏实现扩散模型的快速采样
  • Java-线程池
  • 【机器学习实战笔记 16】集成学习:LightGBM算法
  • AV1高层语法
  • PostgreSQL HOT (Heap Only Tuple) 更新机制详解
  • Swin Transformer核心思路讲解(个人总结)
  • 文件上传漏洞2-常规厂商检测限制绕过原理讲解
  • 强化学习、PPO和GRPO的通俗讲解
  • C语言第一章数据类型和变量(下)
  • Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
  • 视频分析应用的搭建
  • 【Linux-云原生-笔记】Apache相关
  • NE综合实验2:RIP与OSPF动态路由优化配置、FTP/TELNET服务部署及精细化访问控制
  • Java反射与注解
  • 树形动态规划详解
  • 大数据时代UI前端的智能化服务升级:基于用户情境的主动服务设计
  • 【PycharmPyqt designer桌面程序设计】
  • 【学习新知识】用 Clang 提取函数体 + 构建代码知识库 + AI 问答系统
  • GD32 CAN1和TIMER0同时开启问题
  • 《通信原理》学习笔记——第一章
  • 细谈kotlin中缀表达式
  • H2在springboot的单元测试中的应用
  • skywalking镜像应用springboot的例子
  • try-catch-finally可能输出的答案?
  • Docker-镜像构建原因