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

帮你从算法角度来认识二叉树---(三)

引言

在上文提到了通过前序遍历+中序遍历、后序遍历+中序遍历来构建二叉树,这篇来帮大家认识一下其他常见的二叉树操作

二叉树节点数

思路

依旧是递归,这次是整个二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1,而左子树节点个数和右子树节点个数也是求当自己为 “ 根节点 ” 是左子树节点个数 + 右子树节点个数 + 1

代码

public int countNodes(TreeNode root){ if(root==null) return 0; return 1+countNodes(root.left)+countNodes(root.right); }

是否为平衡二叉树

思路

首先先回忆一下平衡二叉树的定义:左右子树高度<=1,这样我们就好写了,直接求左子树和右子树的高度,用 if 判断,高度还是用递归来实现

代码

public boolean isBalanced(TreeNode root){ if(root==null) return true; int left=getHeight(root.left); int right=getHeight(root.right); return Math.abs(left,right)<=1 && isBalanced(root.left) && isBalanced(root.right); } public int getHeight(TreeNode root){ if(root==null) return 0; int left=getHieght(root.left); int right=getHeight(root.right); return Math.max(left,right)+1; }

翻转二叉树

思路

依旧是递归思想,不断的交换左右子树即可

代码

public TreeNode invertTree(TreeNode root){ if(root==null) return null; TreeNode temp=root.left; root.left=root.right; root.right=temp; invertTree(root.left); invertTree(root.right); return root; }

判断是否为对称二叉树

给你一个二叉树的根节点,检查它是否为轴对称

思路

对称的意思是左子树的左孩子=右子树的右孩子,左子树的右孩子=右子树的左孩子

依旧用到了递归思想,调用对比函数来看根节点的左右子树是否对称,而在对比函数里面,使用了递归,不断地递归看是否对称

代码

public boolean isSymmetric(TreeNode root){ if(root==null) return true; TreeNode left=root.left; TreeNode right=root.right; return search(left,right); } public boolean search(TreeNode left,TreeNode right){ if(left==null && right==null){ return true; } if(left==null || right==null){ return false; } if(left.val!=right.val){ return false; } return search(left.left,right.right) && search(left.right,right.left); }

小舟有话说

这些题都比较常见,无一例外都用到了递归思想,大家勤加练习~

http://www.jsqmd.com/news/586017/

相关文章:

  • OpenClaw日志分析技巧:快速定位Kimi-VL-A3B-Thinking多模态任务失败原因
  • 开始新篇章
  • ai辅助开发:让快马智能重构与优化你的传统stl代码
  • 暗黑破坏神2终极存档编辑器完整使用指南:快速打造完美角色
  • 新手入门实战:通过快马平台为博客系统扩展文章搜索功能
  • 如何3步找回丢失的Navicat数据库连接密码
  • Qwen3.5-4B-Claude-Opus入门实战:5个典型问题测试与结果分析全流程
  • 19.删除链表的倒数第N个结点
  • YouTube 系统设计思维研究
  • 3大方案解决Notepad--的内存性能问题:从卡顿到流畅的全方位优化指南
  • 高效GPU显存健康检测:memtest_vulkan全面解析与实战指南
  • 实战应用:基于快马ai项目复现企业级vmware测试环境搭建全过程
  • 从0到1部署MatAnyone:视频智能抠像工具的5个实用步骤
  • S2-Pro多轮对话与上下文管理实战:构建有记忆的聊天机器人
  • 遥感图像处理神器Git-RSCLIP:上传图片输入标签,结果立现
  • ai辅助开发:让快马平台智能解析vm16许可证密钥的奥秘
  • Jenkins 自动化部署:从代码提交到上线一条龙
  • 实战指南:基于快马平台与yolov5构建安全帽检测系统原型
  • 专业Windows系统优化指南:如何用免费工具5分钟解决C盘空间不足问题
  • Wan2.1-umt5一键部署实战:Python环境快速配置与模型调用
  • 3个关键步骤:用Ryujinx模拟器在PC上体验Switch游戏的完整指南
  • EdgeRemover:Windows系统深度集成浏览器的智能管理方案
  • WindowsCleaner:让你的电脑重获新生的系统清理工具
  • LeetCode 两数之和 思路 + 题解
  • 如何高效使用openLCA:环境评估的完整实战指南
  • 快速原型:用快马AI十分钟构建智能应用控制解除工具Demo
  • Docker部署AnythingLLM踩坑记:解决SQLite数据库文件无法打开的权限问题
  • Clark 变换与反 Clark 变换
  • 实战即战力:基于快马为狼蛛f87pro快速生成游戏与专业软件键位方案
  • 保姆级教程:在Ubuntu 20.04上用Python+Bluez 5.50实现你的第一个BLE广播设备