LeetCode - 111. 二叉树的最小深度

111. 二叉树的最小深度

import java.util.LinkedList;
import java.util.Objects;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
}

class Solution {

    private boolean isLeaf(TreeNode root) {
        if (Objects.isNull(root)) {
            return false;
        }

        return Objects.isNull(root.left) && Objects.isNull(root.right);
    }

    public int minDepth(TreeNode root) {
        if (Objects.isNull(root)) {
            return 0;
        }

        LinkedList<QueueData> queue = new LinkedList<>();
        QueueData data = new QueueData(root, 1);
        queue.add(data);

        while (! queue.isEmpty()) {

            data = queue.poll();

            @SuppressWarnings("unchecked")
            TreeNode node = data.treeNode;

            if (isLeaf(node)) {
                return data.deep;
            }

            if (Objects.nonNull(node.left)) {
                QueueData queueData = new QueueData(node.left, data.deep + 1);
                queue.add(queueData);
            }

            if (Objects.nonNull(node.right)) {
                QueueData queueData = new QueueData(node.right, data.deep + 1);
                queue.add(queueData);
            }
        }

        return -1;
    }
}
class QueueData {
    TreeNode treeNode;
    int deep;
    QueueData(TreeNode treeNode, int deep) {
        this.treeNode = treeNode;
        this.deep = deep;
    }
}


猜你喜欢

转载自blog.51cto.com/tianyiya/2172962