题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
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.
解题思路
采用递归思想。
(1)当根为空时,高度为0;
(2)当左右子树只存在一个时,进入存在的那颗子树中。因为最小深度是根结点到最近叶子结点,所以需要再去寻找叶子节点。
(3)当左右子树都在时,返回高度较小的子树的高度再加上根。
如果采用非递归思想,就采用队列的方式,利用层次遍历,找到第一个左右子树为空的节点,此时的高度就是最小深度。
class Solution {
public:
int run(TreeNode *root) {
if(root == NULL)
return 0;
if(root->left == NULL) //如果左子树为空,返回右子树高度加根
return run(root->right) + 1;
if(root->right == NULL) //如果右子树为空,返回左子树高度加根
return run(root->left) + 1;
int leftDepth = run(root->left) + 1; //左子树高度加根
int rightDepth = run(root->right) + 1; //右子树高度加根
return leftDepth > rightDepth ? rightDepth : leftDepth;
}
};