二叉树的最小深度

二叉树的最大深度

如果二叉树不为空,则分别求二叉树的额左右子树的深度,然后取最大的的左树深度或右树深度,加1,因为根节点的深度是1


int maxDepth(TreeNode *root) {
        // write your code (here)
        if(root == NULL)
            return 0;
        int leftDepth = maxDepth(root->left);
        int rightDepth = maxDepth(root->right);

        return leftDepth > rightDepth ? (leftDepth + 1) : (rightDepth + 1);
    }


求二叉树的最小深度和最大深度的区别

不能够直接将大于号改成小于号,会出现这样一种情况,当把小于号改成大于号时,当树是倾斜树时,即只有左子树或子右子树是,这样数的最小深度就会被求为1.

二叉树的最小深度是指从根节点到最小叶子的节点。

有两种实现方式:一种是判断左右子树是否为空,若左子树为空,则返回右子树的深度,若右子树为空,则返回左子树的深度,若左右子树都不为空,则返回左右子树的最小值。

一种是计算左右子树是判断是否等于0,如果等于0,深度赋值为最大值。

	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;
		}
		int left = minDepth(root.left);
		int right = minDepth(root.right);
		return left < right ? (left + 1) : (right + 1);
	}

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



猜你喜欢

转载自blog.csdn.net/hlang8160/article/details/79112532