数组二叉树-华为OD

系列文章目录

前言

本人最近再练习算法,所以会发布一些解题思路,希望大家多指教

一、题目描述

二叉树也可以用数组来存储,给定一个数组,树的根节点的值存储在下标1,对于存储在下标N的节点,他的左子节点和右子节点分别存储在下标2N和2N+1,并且我们用值-1代表一个节点为空。
给定一个数组存储的二叉树,试求从根节点到最小的叶子节点的路径,路径由节点的值组成。

二、输入描述

输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分割。
注意第一个元素即为根节点的值,即数组的第N个元素对应下标N,下标0在树的表示中没有使用,所以我们省略了。
输入的树最多为7层。

三、输出描述

输出从根节点到最小叶子节点的路径上,各个节点的值,由空格分割,用例保证最小叶子节点只有一个。

四、java代码

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //获取存放二叉树信息的数组
        int[] array = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int n = array.length;
        //初始化最小叶子结点的值
        int min = Integer.MAX_VALUE;
        //初始化最小叶子结点的下标
        int min_index = -1;
        for (int i = 0; i < n; i++) {
            if(array[i] != -1){
                //跳过非叶子结点
                if((i+1)*2-1 < n && array[(i+1)*2 -1] != -1) continue;
                if((i+1)*2 < n && array[(i+1)*2] != -1) continue;
                //通过比较获取最小叶子结点
                if(min > array[i]){
                    min_index = i;
                    min = array[i];
                }
            }
        }
        //存放最小叶子结点到根路径的所有节点
        List<Integer> list = new ArrayList<>();
        list.add(min);
        //通过当前节点下标计算上一个父节点的下标
        int temp = min_index;
        while (temp > 0){
            temp = (temp - 1)/2;
            list.add(array[temp]);
        }
        //倒序输出根节点到最小叶子结点的路径
        for (int i = list.size() -1; i >=0 ; i--) {
            System.out.print(list.get(i)+" ");
        }
    }

五、测试用例

输入:
2 5 8 6 4 3 -1 9 -1 11 13
输出:
在这里插入图片描述

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 08:22:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 08:22:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 08:22:06       87 阅读
  4. Python语言-面向对象

    2024-05-11 08:22:06       96 阅读

热门阅读

  1. axios常用配置

    2024-05-11 08:22:06       33 阅读
  2. npm详解

    2024-05-11 08:22:06       29 阅读
  3. 【服务治理中间件】consul介绍和基本原理

    2024-05-11 08:22:06       34 阅读
  4. Express中间件(完善)

    2024-05-11 08:22:06       32 阅读
  5. VUE----数字增加,兼容小程序

    2024-05-11 08:22:06       31 阅读
  6. Android Gradle的插件

    2024-05-11 08:22:06       28 阅读
  7. sass 详解

    2024-05-11 08:22:06       40 阅读
  8. 人工智能对企业安全的影响与风险控制-内刊

    2024-05-11 08:22:06       26 阅读
  9. Oracle行锁怎么杀

    2024-05-11 08:22:06       29 阅读
  10. rviz与urdf

    2024-05-11 08:22:06       31 阅读
  11. [补题记录] StarryCoding 入门教育赛3 D.电弧陷阱

    2024-05-11 08:22:06       29 阅读
  12. 前端Vue怎么获取登录的用户名或用户id

    2024-05-11 08:22:06       36 阅读
  13. 小米poco x3 pro adbd 以root权限启动提供服务

    2024-05-11 08:22:06       25 阅读