1. 程式人生 > 實用技巧 >Mysql5.7原始碼編譯安裝指令碼

Mysql5.7原始碼編譯安裝指令碼

Leetcode 111 二叉樹的最小深度

資料結構定義:

給定一個二叉樹,找出其最小深度。

最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

說明:葉子節點是指沒有子節點的節點。
    
輸入:root = [3,9,20,null,null,15,7]
輸出:2
    
輸入:root = [2,null,3,null,4,null,5,null,6]
輸出:5

普通深度遞迴寫法:

class Solution {
    private int depth = Integer.MAX_VALUE;
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        dfsDepth(root, 1);
        return depth;
    }

    private void dfsDepth(TreeNode root, int length) {
        if (root == null) {
            return;
        }
        if (root.left == null && root.right == null) {
            depth = Math.min(depth, length);
            return;
        }
        dfsDepth(root.left,  length + 1);
        dfsDepth(root.right,  length + 1);
    }
}

另一種深度遍歷方式:

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) return 0;
        else if(root.left == null) return minDepth(root.right) + 1;
        else if(root.right == null) return minDepth(root.left) + 1;
        else return Math.min(minDepth(root.left),minDepth(root.right)) + 1;
    }
}

廣度優先遍歷

/*
* 思路: 定義QueueNode類,儲存TreeNode和對應的depth
*/
class Solution {
    class QueueNode{
        private TreeNode root;
        private int depth;
        QueueNode(TreeNode root,int depth){
            this.root = root;
            this.depth = depth;
        }
        public TreeNode getTreeNode(){
            return root;
        }
        public int getDepth(){
            return depth;
        }
    }
    public int minDepth(TreeNode root) {
            if(root == null){
                return 0;
            }
            Queue<QueueNode> queue = new LinkedList<>();
            queue.offer(new QueueNode(root,1));
            while(!queue.isEmpty()){
                QueueNode node = queue.poll();
                int depth = node.getDepth();
                TreeNode treeNode = node.getTreeNode();
                if(treeNode.left == null && treeNode.right == null){
                    return depth;
                }
                if(treeNode.left != null){
                    queue.offer(new QueueNode(treeNode.left,depth + 1));
                }
                if(treeNode.right != null){
                    queue.offer(new QueueNode(treeNode.right,depth + 1));
                }
            }
            return 0;
    }
}