leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数

本文主要是介绍leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、[110]平衡二叉树

注意:注释的1、2两处得有返回值-1

class Solution {public boolean isBalanced(TreeNode root) {int result = getHeight(root);return result != (-1);}//高度public int getHeight(TreeNode node){if(node==null){return 0;}int lh = getHeight(node.left);//注意1if(lh==-1){return -1;}int rh = getHeight(node.right);//注意2if(rh==-1){return -1;}if(Math.abs(lh-rh)>1){return -1;}return Math.max(lh,rh)+1;}
}

二、[257]二叉树的所有路径

class Solution {public List<String> binaryTreePaths(TreeNode root) {List<String> res=new ArrayList<>();List<Integer> path=new ArrayList<>();treePaths(root,res,path);return res;}void treePaths(TreeNode node,List<String> res,List<Integer> path){path.add(node.val);if(node.left==null&&node.right==null){String tmp="";for(int i=0;i< path.size()-1;i++){tmp+=path.get(i);tmp+="->";}tmp+=path.get(path.size()-1);res.add(tmp);}//注意不为空的判断if(node.left!=null) {treePaths(node.left, res, path);path.remove(path.size() - 1);}if(node.right!=null) {treePaths(node.right, res, path);path.remove(path.size() - 1);}}}

三、[404]左叶子之和

重点:注意不能直接返回 root.left.val,即它的if条件 不是 终止递归的条件

如:根节点的左子树,只有一个节点,符合条件,此时直接返回

而右子树还没有进行递归,解答错误。

应该暂存tmp=root.left.val,

在左右子树均进入递归后,再返回。

另:后序遍历 逻辑更加容易理解。

class Solution {public int sumOfLeftLeaves(TreeNode root) {if(root==null){return 0;}if(root.left==null&&root.right==null){return 0;}//防止出现根节点的左节点满足条件,就直接返回了,递归还没有进行//前序遍历//还有右子树没有遍历,不能直接returnint tmp=0;if(root.left!=null&&root.left.left==null&&root.left.right==null){tmp=root.left.val;}int lv = sumOfLeftLeaves(root.left);int rv = sumOfLeftLeaves(root.right);return lv+rv+tmp;//0+0+tmp//后序遍历
//        int lv = sumOfLeftLeaves(root.left);
//        int rv = sumOfLeftLeaves(root.right);
//        int tmp=0;
//        if(root.left!=null&&root.left.left==null&&root.left.right==null)
//        {
//              tmp=root.left.val;
//        }
//        return tmp+lv+rv;}
}

四、[222]完全二叉树的节点个数

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

这篇关于leetcode-13-[110]平衡二叉树[257]二叉树的所有路径[404]左叶子之和[222]完全二叉树的节点个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079025

相关文章

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

chart 完成拓扑图单节点拖拽不影响其他节点位置

就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头。 拖拽某个节点,只有关联到的线条会跟着变动其他的节点位置不变。 参考 https://gallery.echartsjs.com/editor.html?c=x8Fgri22P9 https://echarts.baidu.com/exa

SQL Server中,用Restore DataBase把数据库还原到指定的路径

restore database 数据库名 from disk='备份文件路径' with move '数据库文件名' to '数据库文件放置路径', move '日志文件名' to '日志文件存放置路径' Go 如: restore database EaseWe from disk='H:\EaseWe.bak' with move 'Ease

vue3项目将所有访问后端springboot的接口统一管理带跨域

vue3项目将所有访问后端springboot的接口统一管理带跨域 一、前言1.安装Axios2.创建Axios实例3.创建API服务文件4.在组件中使用API服务 二、跨域三、总结 一、前言 在Vue 3项目中,统一管理所有访问后端Spring Boot接口的最佳实践是创建一个专门的API服务层。这可以让你的代码更加模块化、可维护和集中管理。你可以使用Axios库作为HTT

LeetCode--231 2的幂

题目 给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 示例 示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false class Solution {public:bool isPowerOfTwo(int n) {if (n <= 0) return fals

LeetCode--234 回文链表

题目 请判断一个链表是否为回文链表。 示例 示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val

LeetCode--220 存在重复元素 III

题目 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。 示例 示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输出: true示例

LeetCode--217 存在重复元素

题目 给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。 示例 示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true class Solution {p

LeetCode--214 最短回文串

题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 示例 1:输入: "aacecaaa"输出: "aaacecaaa"示例 2:输入: "abcd"输出: "dcbabcd" 思路: 我们需要添加多少个字符与给定字符串的前缀子串回文的长度有关. 也就是说去掉其前缀的回文子串,我们只需要补充剩下的子串的逆序