首页 > 其他分享 >Day13 二叉树part03| LeetCode 110.平衡二叉树,二叉树的所有路径,左叶子之和,完全二叉树的节点个数

Day13 二叉树part03| LeetCode 110.平衡二叉树,二叉树的所有路径,左叶子之和,完全二叉树的节点个数

时间:2024-09-11 22:07:09浏览次数:1  
标签:node return part03 二叉树 path null root 110

110.平衡二叉树

110. 平衡二叉树

  • 定义:左右子树的高度差的绝对值不超过1
  • 深度:从上到下查——> 前序遍历(中左右)
  • 高度:从下到上查——> 后序遍历(左右中)
class Solution {
        public boolean isBalanced(TreeNode root) {

                if(getHeight(root)==-1)
                    return false;
                return true;
        }
        int getHeight(TreeNode node)
        {

            if(node==null) return 0;
            int leftHeight=getHeight(node.left);
            if(leftHeight==-1) return -1;
            int rightHeight=getHeight(node.right);
            if(rightHeight==-1) return -1;

            if(Math.abs(leftHeight-rightHeight)>1)//高度差大于1,不是平衡二叉树
            {
                return -1;
            }
            return Math.max(leftHeight,rightHeight)+1;//向上传递,高度加一

        }

    }

257. 二叉树的所有路径

257. 二叉树的所有路径

 class Solution {
        public List<String> binaryTreePaths(TreeNode root) {

            List<String> result=new ArrayList<>();
            if(root==null) return result;

            List<Integer> path=new ArrayList<>();
            traversal(root,path,result);
            return  result;
        }

        private void traversal(TreeNode root, List<Integer> path, List<String> res)
        {
            path.add(root.val);//中

            //叶子节点
            if(root.left==null&&root.right==null)
            {
                StringBuilder s=new StringBuilder();
                for(int i=0;i<path.size()-1;i++)
                {
                    s.append(path.get(i)).append("->");

                }
                s.append(path.get(path.size()-1));
                res.add(s.toString());
                return;
            }
            if(root.left!=null)
            {
                traversal(root.left,path,res);//递归
                //回溯
                path.remove(path.size()-1);
            }
            if(root.right!=null)
            {
                traversal(root.right,path,res);
                path.remove(path.size()-1);
            }
        }
    }

404.左叶子之和

404. 左叶子之和

  • 左叶子
    • 叶子节点
    • 左孩子
class Solution {
        public int sumOfLeftLeaves(TreeNode root) {

              return  travel(root);

        }
        private int travel(TreeNode node)
        {
            if(node==null) return 0;

           int leftnumber= travel(node.left);
           int midVal=0;
           if(node.left!=null&&node.left.left==null&&node.left.right==null)
           {
               midVal= node.left.val;
           }
           int rightnumber= travel(node.right);
           return midVal+leftnumber+rightnumber;

        
        }
    }

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

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

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

    }

标签:node,return,part03,二叉树,path,null,root,110
From: https://www.cnblogs.com/FreeDrama/p/18409061

相关文章

  • NC 序列化二叉树
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述请实现两个函数,分别用来序列化和反序列化二叉树,不对序列化之后的字......
  • 洛谷 P11021 [LAOI-6] 区间测速 题解
    题目传送门使用multisetmultiset可以看成一个序列,支持插入一个数或删除一个数,时间复杂度均为\(O(\logn)\),且能始终保证序列中的数是有序的,而且序列中可以存在重复的数(而set容器要求两两不同,且不保证有序)。一个基本事实:速度最大的时刻必然出现在两个相邻点之间。例如从......
  • 二叉树(上)
    目录树型结构概念二叉树概念二叉树的存储 二叉树基本操作基本变量二叉树的遍历完整代码树型结构概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树......
  • 【洛谷 P5076】【深基16.例7】普通二叉树(简化版)题解(多重集合+lower_bound+upper_bound
    【深基16.例7】普通二叉树(简化版)题目描述您需要写一种数据结构,来维护一些数(都是以内的数字)的集合,最开始时集合是空的。其中需要提供以下操作,操作次数不超过:查询数的排名(排名定义为比当前数小的数的个数。若有多个相同的数,应输出最小的排名)。查询排名为的数。求的前驱(......
  • P1110
    delicious#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;multiset<int>delta,full;intst[500100],ed[500100];intsrt=inf;intn,m;voidupdate_srt(intx){ multiset<int>::iteratorit=full.lower_bound(x); intnw=*it......
  • 力扣热题100 - 二叉树:将有序数组转换为二叉搜索树
    题目描述:题号:108给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。解题思路:思路一:中序构建二叉树选择根节点:首先,选择数组的中间元素作为根节点。这样做可以确保生成的二叉搜索树尽可能平衡。递归构建子树:将数组分......
  • 【代码随想录Day13】二叉树Part01
    理论基础文章讲解:代码随想录二叉树节点的定义:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val......
  • 总结电脑报错找不到msvcr110.dll原因,5种方式完美解决
    msvcr110.dll作为MicrosoftVisualC++运行时库的一部分,包含了执行许多基于Windows操作系统的应用程序所必需的函数和例行程序。当用户尝试运行依赖于此库的应用程序时,如果系统中缺少msvcr110.dll文件或者该文件损坏,可能会遇到错误提示,如“找不到msvcr110.dll”或“msvcr110.dl......
  • 【Python】排序算法及二叉树讲解(冒泡 选择 插入 二分查找 二叉树的广度优先和三种深
    排序算法​所谓排序,使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作​排序算法,就是如何使得记录按照要求排列的方法​排序算法在很多领域是非常重要​在大量数据的处理方面:一个优秀的算法可以节省大量的资源。​在各个领域中考虑到数据的......
  • 代码随想录算法 - 二叉树
    题目1226.翻转二叉树给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在[0,100]内-100<=Node.val......