LeetCode 111. Minimum Depth of Binary Tree(二叉树最小深度)

来源:互联网 发布:大数据徐子沛 编辑:程序博客网 时间:2024/06/05 23:49

原题网址:https://leetcode.com/problems/minimum-depth-of-binary-tree/

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;}


0 0
原创粉丝点击