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

代码随想录day15| 110.平衡二叉树 、 257. 二叉树的所有路径 、 404.左叶子之和、 222.完全二叉树的节点个数

代码随想录day15| 110.平衡二叉树 、 257. 二叉树的所有路径 、 404.左叶子之和、 222.完全二叉树的节点个数

  • 110.平衡二叉树
    • 思路
  • 257. 二叉树的所有路径
    • 思路
  • 404.左叶子之和
    • 思路
  • 222.完全二叉树的节点个数

110.平衡二叉树

思路

递归后序遍历(知道左右子树的结果才能确定当前根节点的性质), 左子树的深度和右子树的深度相差是否大于一,如果大于一则返回-1,否则返回当前节点深度

class Solution {public boolean isBalanced(TreeNode root) {if(getDepth(root) == -1){return false;}return true;}public int getDepth(TreeNode root) {if(root == null){return 0;}int m = getDepth(root.left);int n = getDepth(root.right);if(m ==-1 ||n == -1){return -1;}else if(Math.abs(m-n) > 1){return -1;}else{return 1+Math.max(m,n);}}
}

257. 二叉树的所有路径

思路

使用前序遍历+回溯来收集路径

class Solution {public List<String> binaryTreePaths(TreeNode root) {List<Integer> list1 = new LinkedList();List<String> list = new ArrayList();getPath(root, list1, list);return list;}public void getPath(TreeNode root, List<Integer> list1, List list) {list1.add(root.val);if(root.left == null && root.right == null){String s = listToString(list1);list.add(s);return ;}if(root.left != null){getPath(root.left, list1, list);list1.remove(list1.size()-1);}if(root.right != null){getPath(root.right, list1, list);list1.remove(list1.size()-1);}}public String  listToString(List<Integer> list1){StringBuffer s = new StringBuffer();s.append(list1.get(0));for(int i = 1 ; i < list1.size() ; i++){s.append("->");s.append(list1.get(i)); }return s.toString();}
}

404.左叶子之和

思路

使用后序遍历,收集左子树和右子树左叶子节点的和

class Solution {public int sumOfLeftLeaves(TreeNode root) {int sum = 0;return getSunLeft(root);}public int getSunLeft(TreeNode root) {if(root == null){return 0;}if(root.left == null && root.right == null){return 0;}int left = getSunLeft(root.left);int right = getSunLeft(root.right);if(root.left != null && root.left.left ==null && root.left.right == null){  left = root.left.val;}return left+right;}
}

222.完全二叉树的节点个数

使用递归(中序)记录节点个数

class Solution {public int countNodes(TreeNode root) {int sum = 0;if(root == null){return 0;}return count(root, sum);}public int count(TreeNode root, int sum) {if(root.left == null && root.right == null){return sum+=1;}if(root.left != null){sum = count(root.left, sum);}sum += 1;if(root.right != null){sum = count(root.right, sum);}return sum;}
}

http://www.mrgr.cn/news/64917.html

相关文章:

  • CentOS Linux教程(12)--常用编辑器
  • Kubernetes运行大数据组件-运行spark
  • 【双指针】【数之和】 LeetCode 633.平方数之和
  • 微信公众号推送
  • 信息安全工程师(74)网络安全风险评估技术方法与工具
  • 进度条的实现(配合make和makefile超详细)
  • dockerfile/docker-compose构建镜像上下文目录编写要点
  • 进程间通信小练习
  • 电子电气架构 --- Trace 32(劳特巴赫)多核系统的调试
  • 第1篇 引言
  • vscode ssh+clion+idea等本周小结-2024.11.3
  • 阿里巴巴Seata分布式事务解决方案
  • ubuntu20安装opencv3.2记录
  • 【linux指令】----如何创建一个子进程
  • 智能指针的原理和使用
  • 【论文复现】神经网络的公式推导与代码实现
  • 【react如何在chrome浏览器里面调试?】
  • DAY75WEB 攻防-验证码安全篇接口滥用识别插件复用绕过宏命令填入滑块类
  • 自由学习记录(18)
  • gdal连接pg(java案例)
  • 图神经网络在复杂系统中的应用
  • Python中常见的矩阵乘法操作
  • linux 系统扩容
  • 客户端时间 与 服务器时间
  • Flink本地模式安装详解
  • Linux第二周作业