[蓝蓝计算机考研算法训练二期]-day21

87 阅读1分钟

30、给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

image.png
返回它的最小深度 2

1、思路

深度优先遍历整棵树:

  • 当节点为空返回0;
  • 当节点左右孩子都为空时,说明该节点为叶子节点,返回1;
  • 当左孩子不为空时,递归求左子树的最小深度,当右孩子不为空时,递归求右孩子的最小深度,返回左右子树中最小深度较小的再加一。
    因为某些节点可能左右孩子中有一方为空,而该节点还不是叶子节点,所以将左右孩子节点的最小深度初始为一个极大的数,这样比较左右子树最小深度时,为空节点的子树的最小深度一定大于非空节点的子树。

2、具体实现(java)

public int minDepth(TreeNode root) {
        int dep_l=Integer.MAX_VALUE,dep_r=Integer.MAX_VALUE;
	        if(root==null){
	            return 0;
	        }
            if(root.left==null&&root.right==null){
                return 1;
            }
            if(root.left!=null){
	            dep_l=minDepth(root.left);
	            
	        }
            if(root.right!=null){
                dep_r=minDepth(root.right);
            }
            return (dep_l<dep_r?dep_l:dep_r)+1;
 }