算法刷题记录.leetcode111.二叉树最小深度

57 阅读1分钟

题目描述

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

解析

递归法

  1. 确定递归函数的参数和返回值

参数为要传入的二叉树根节点,返回的是int类型的深度。

代码如下:

int getDepth(TreeNode* node)
  1. 确定终止条件

终止条件也是遇到空节点返回0,表示当前节点的高度为0。

代码如下:

if (node == NULL) return 0;
  1. 确定单层递归的逻辑
    如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。 反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。

代码

class Solution {

public:

int minDepth(TreeNode* root) {

if(root == nullptr) return 0;

\


int left = minDepth(root->left);

int right = minDepth(root->right);

\


if(root->left==nullptr && root->right!=nullptr) return 1+right;

if(root->left!=nullptr && root->right==nullptr) return 1+left;

\


return 1+min(left,right);

\


}

};