LeetCode 111. Minimum Depth of Binary Tree(二叉樹最小深度)
阿新 • • 發佈:2019-01-25
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
方法:遞迴,自底向上。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int minDepth(TreeNode root) { if (root == null) return 0; if (root.left == null && root.right == null) return 1; if (root.left == null) return minDepth(root.right) + 1; if (root.right == null) return minDepth(root.left) + 1; return Math.min(minDepth(root.left), minDepth(root.right)) + 1; } }
方法二:用棧來模擬遞迴。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int minDepth(TreeNode root) { if (root == null) return 0; Stack<Input> inputs = new Stack<>(); Stack<Integer> outputs = new Stack<>(); inputs.push(new Input(root, 0)); while (!inputs.isEmpty()) { Input input = inputs.pop(); if (input.state == 0) { if (input.root == null) { outputs.push(0); continue; } else if (input.root.left == null && input.root.right == null) { outputs.push(1); continue; } else if (input.root.left == null) { input.state = 1; inputs.push(input); inputs.push(new Input(input.root.right, 0)); continue; } else if (input.root.right == null) { input.state = 1; inputs.push(input); inputs.push(new Input(input.root.left, 0)); continue; } else { input.state = 2; inputs.push(input); inputs.push(new Input(input.root.left, 0)); continue; } } else if (input.state == 1) { Integer output = outputs.pop(); output ++; outputs.push(output); continue; } else if (input.state == 2) { input.value = outputs.pop(); input.state = 3; inputs.push(input); inputs.push(new Input(input.root.right, 0)); continue; } else if (input.state == 3) { Integer right = outputs.pop(); Integer output = Math.min(input.value, right) + 1; outputs.push(output); continue; } } return outputs.pop(); } } class Input { TreeNode root; int state; Input(TreeNode root, int state) { this.root = root; this.state = state; } int value; }