Mysql5.7原始碼編譯安裝指令碼
阿新 • • 發佈:2020-12-01
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; } }