820算法题解答(2022年8月12日更新)
2022/8/13 14:23:50
本文主要是介绍820算法题解答(2022年8月12日更新),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
820算法题解答
2021年最后一题:如何判断一个二叉树的结构是否对称(不考虑结点的值,只考虑结构)
[分析]:常规先序遍历的顺序是:中,左,右;镜像先序遍历的顺序是:中,右,左。 只要常规先序序列和镜像先序序列相等,那么这颗二叉树就是对称的。 [注]:遍历的序列需要包括null结点
[代码实现] public static void judgeMirror(TreeNode node){ //两个list用来存储常规先序序列和镜像先序序列 List left = new ArrayList(); List right = new ArrayList(); //分别获取常规先序序列和镜像先序序列的函数 leftOrder(node, left); rightOrder(node, right); //将获得的序列进行一一对比,若有不同则非对称,若相同则对称 for (int i = 0; i < left.size(); i++){ if (left.get(i) != right.get(i)){ System.out.println("该树非镜像"); return; } } System.out.println("该树是镜像"); return; } public static void leftOrder(TreeNode node, List list){ if (node == null){ //因为不考虑结构,所以若结点为null则add 0 list.add(0); return; } //因为不考虑结构,所以若结点为不为null则add 1 list.add(1); leftOrder(node.left, list); leftOrder(node.right, list); return; } public static void rightOrder(TreeNode node, List list){ if (node == null){ list.add(0); return; } list.add(1); rightOrder(node.right, list); rightOrder(node.left, list); return; }
2020年最后一题:如何获取一个二叉排序树中值小于给定值x的最大的结点target
[分析]:对于当前结点,若是值>=x,则target必定在左孩子取到 若是值<x,则target=当前节点或者在右孩子取到 [注]:注意边界条件
public static TreeNode findMax(TreeNode node, int x){ if (node == null) return null; //若是当前结点的值<=x,则在左孩子寻找target if (node.val >= x) return findMax(node.left,x); //否则target=当前结点或者在右孩子中取到 else{ //rightMax即为右孩子中的target TreeNode rightMax = findMax(node.right,x); //当rightMax为空时,target即为当前结点;否则为rightMax return rightMax == null ? node : rightMax; } }
这篇关于820算法题解答(2022年8月12日更新)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解