剑指Offer之Java算法习题精讲二叉树专项训练


Posted in Java/Android onMarch 21, 2022

题目一

剑指Offer之Java算法习题精讲二叉树专项训练

 解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int i = 0;
    int res = 0;
    public int kthSmallest(TreeNode root, int k) {
        method(root,k);
        return res;
    }
     public void method(TreeNode root, int k){
        if(root==null) return ;
        method(root.left,k);
        i++;
        if(i==k){
            res = root.val;
            return ;
        }
        method(root.right,k);
     }
}

题目二

剑指Offer之Java算法习题精讲二叉树专项训练

 解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int sum = 0;
    public TreeNode convertBST(TreeNode root) {
        method(root);
        return root;
    }
    public void method(TreeNode root) {
        if(root==null){
            return;
        }
        method(root.right);
        sum+=root.val;
        root.val = sum;
        method(root.left);
 
    }
}

题目三

剑指Offer之Java算法习题精讲二叉树专项训练

 解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        return method(root,null,null);
    }
    public boolean method(TreeNode root,TreeNode min,TreeNode max){
        if(root==null) return true;
        if(min!=null&&root.val<=min.val) return false;
        if(max!=null&&root.val>=max.val) return false;
        return method(root.left,min,root)&&method(root.right,root,max);
    }
}

题目四

剑指Offer之Java算法习题精讲二叉树专项训练

解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if(root==null) return null;
        if(root.val==val) return root;
        if(root.val>=val){
            return searchBST(root.left,val);
        }
        if(root.val<val){
            return searchBST(root.right,val);
        }
        return null;
    }
}

题目五

剑指Offer之Java算法习题精讲二叉树专项训练

 解法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        return  method(root,val);
    }
    public TreeNode method(TreeNode root, int val){
        if(root==null) return new TreeNode(val);
        if (root.val < val) 
            root.right = insertIntoBST(root.right, val);
        if (root.val > val) 
            root.left = insertIntoBST(root.left, val);
        return root;
    }
}

题目六

剑指Offer之Java算法习题精讲二叉树专项训练

算法

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if (root == null) return null;
        if (root.val == key){
            if (root.left == null) return root.right;
            if (root.right == null) return root.left;
            TreeNode minNode = getMin(root.right);
            root.right = deleteNode(root.right, minNode.val);
            minNode.left = root.left;
            minNode.right = root.right;
            root = minNode;
        }else if(root.val>key){
            root.left = deleteNode(root.left,key);
        }else{
            root.right = deleteNode(root.right,key);
        }
        return root;
    }
    TreeNode getMin(TreeNode node) {
        while (node.left != null) node = node.left;
        return node;
    }   
}

到此这篇关于剑指Offer之Java算法习题精讲二叉树专项训练的文章就介绍到这了,更多相关Java 二叉树内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
SpringBoot2 参数管理实践之入参出参与校验的方式
Jun 16 Java/Android
Spring Boot 实现敏感词及特殊字符过滤处理
Jun 29 Java/Android
浅谈自定义校验注解ConstraintValidator
Jun 30 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
Java比较两个对象中全部属性值是否相等的方法
Aug 07 Java/Android
springboot中的pom文件 project报错问题
Jan 18 Java/Android
SpringCloud项目如何解决log4j2漏洞
Apr 10 Java/Android
JAVA长虹键法之建造者Builder模式实现
Apr 10 Java/Android
Elasticsearch Recovery 详细介绍
Apr 19 Java/Android
mybatis 获取更新记录的id
May 20 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
springboot+zookeeper实现分布式锁
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
Mar 21 #Java/Android
Spring this调用当前类方法无法拦截的示例代码
SpringCloud Feign请求头删除修改的操作代码
Mar 20 #Java/Android
JavaWeb实现显示mysql数据库数据
关于Mybatis中SQL节点的深入解析
You might like
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
python操作MySQL数据库的方法分享
2012/05/29 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Django中使用Celery的教程详解
2018/08/24 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
详解Python3中ceil()函数用法
2019/02/19 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
Python爬虫 批量爬取下载抖音视频代码实例
2019/08/16 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
荷兰超市:DEEN
2018/03/14 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
小学三年级学生评语
2014/04/22 职场文书
质量管理标语
2014/06/12 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
党建工作汇报材料
2014/12/24 职场文书
杜甫草堂导游词
2015/02/03 职场文书
Jmerte 分布式压测及分布式压测配置
2022/04/30 Java/Android