当前位置:   article > 正文

代码随想录算法训练营第十七天| 二叉树 |||

代码随想录算法训练营第十七天| 二叉树 |||

110.平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

  1. class Solution {
  2. public boolean isBalanced(TreeNode root) {
  3. return getHeight(root)!=-1;
  4. }
  5. private int getHeight(TreeNode root){
  6. if(root==null){
  7. return 0;
  8. }
  9. int leftHeight = getHeight(root.left);
  10. if(leftHeight==-1){
  11. return -1;
  12. }
  13. int rightHeight = getHeight(root.right);
  14. if(rightHeight==-1){
  15. return -1;
  16. }
  17. if(Math.abs(leftHeight-rightHeight)>1){
  18. return -1;
  19. }
  20. return Math.max(leftHeight,rightHeight)+1;
  21. }
  22. }

 后序遍历的思想

257.二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点

  1. class Solution {
  2. public List<String> binaryTreePaths(TreeNode root) {
  3. List<String> res = new ArrayList<>();
  4. if(root==null){
  5. return res;
  6. }
  7. List<Integer> paths = new ArrayList<>();
  8. traversal(root,paths,res);
  9. return res;
  10. }
  11. private void traversal(TreeNode root, List<Integer> paths, List<String> res){
  12. paths.add(root.val);
  13. // 遇到叶子节点
  14. if(root.left==null&&root.right==null){
  15. StringBuilder sb = new StringBuilder();
  16. for(int i=0;i<paths.size()-1;i++){
  17. sb.append(paths.get(i)).append("->");
  18. }
  19. sb.append(paths.get(paths.size()-1));
  20. res.add(sb.toString());
  21. return;
  22. }
  23. if(root.left!=null){
  24. traversal(root.left,paths,res);
  25. paths.remove(paths.size()-1);//回溯
  26. }
  27. if(root.right!=null){
  28. traversal(root.right,paths,res);
  29. paths.remove(paths.size()-1);//回溯
  30. }
  31. }
  32. }

回溯的思想

404. 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

  1. class Solution {
  2. public int sumOfLeftLeaves(TreeNode root) {
  3. if(root==null){
  4. return 0;
  5. }
  6. int leftValue = sumOfLeftLeaves(root.left);
  7. int rightValue = sumOfLeftLeaves(root.right);
  8. int midValue = 0; // 只能通过父节点来判断子节点是不是左叶子
  9. if(root.left!=null&&root.left.left==null&&root.left.right==null){
  10. midValue = root.left.val;
  11. }
  12. return leftValue + rightValue + midValue;
  13. }
  14. }

节点A的左孩子不为空,且左孩子的左右孩子都为空(说明是叶子节点),那么A节点的左孩子为左叶子节点

需要通过父节点来判断子节点是不是叶子节点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/694917
推荐阅读
相关标签
  

闽ICP备14008679号