最小叶子节点路径

  • 二叉树也可以用数组来存储,
  • 给定一个数组,树的根节点的值储存在下标1,
  • 对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2n和2n+1,
  • 并且我们用-1代表一个节点为空,
  • 给定一个数组存储的二叉树,
  • 试求从根节点到最小的叶子节点的路径,路径由节点的值组成。
/**
     * 分析:因为需要找到最小的叶子节点的路径,所以需要知道层数,只判断最下面一层的数量即可
     * 已知二叉树的元素数量为:
     * 第一层:1--> 2^1 - 1
     * 第二层:2--> 2^2 - 1
     * 第三层:4--> 2^3 - 1
     * 第四层:8--> 2^4 - 1
     * ***
     * 第n层:2^(n - 1) --> 2^n - 1
     *
     * @param arr 模拟树的数组
     */
    public void answer(int[] arr) {
        //最小叶子节点的角标
        int index = 0;
        //遍历,找到最小的叶子节点
        int min = Integer.MAX_VALUE;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] != -1) {
                if (i < arr.length / 2) {
                    if (arr[2 * i] == -1 && arr[2 * i + 1] == -1) {
                        if (min > arr[i]) {
                            min = arr[i];
                            index = i;
                        }
                    }
                }else {
                    if (min > arr[i]) {
                        min = arr[i];
                        index = i;
                    }
                }
            }
        }
        while (index > 0) {
            System.out.print(arr[index]);
            index = index / 2;
            if (index > 0){
                System.out.print(" ");
            }
        }
    }

全部评论

相关推荐

Java面试先知:我也是和你一样的情况,hr 说等开奖就行了
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务