Minimum Depth of Binary Tree,求树的最小深度

算法分析:递归和非递归两种方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class MinimumDepthofBinaryTree {
     
    //递归,树的最小深度,就是它左右子树的最小深度的最小值+1
    public int minDepth(TreeNode root) {
        if(root == null)
        {
            return 0;
        }
        int lmin = minDepth(root.left);
        int rmin = minDepth(root.right);
        if(lmin == 0 && rmin == 0)
        {
            return 1;
        }
        if(lmin == 0)//左子树为空,右子树不为空,则最小深度为右子子树的最小深度+1
        {
            return rmin + 1;
        }
        if(rmin == 0)
        {
            return lmin + 1;
        }
        return Math.min(lmin, rmin)+1;
    }
     
     
    //非递归,按层遍历,找到第一个叶子结点
    public int minDepth2(TreeNode root) {
        if(root == null)
        {
            return 0;
        }
        ArrayList<TreeNode> list = new ArrayList<>();
        int count = 1;//初始值为1
        list.add(root);
        while(!list.isEmpty())
        {
            ArrayList<TreeNode> temp = new ArrayList<>();
            for (TreeNode node : list) {
                if(node.left == null && node.right == null)//当节点左右子树都为空时,该节点为第一个叶子节点,该节点的深度即为树的最小深度
                {
                    return count;
                }
                if(node.left != null)
                {
                    temp.add(node.left);
                }
                if(node.right != null)
                {
                    temp.add(node.right);
                }
            }
            count ++;//按层遍历,每循环一次,就是一层,层数加1
            list = temp;
        }
        return count;
    }
}

  

posted @   32ddd  阅读(311)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示