代码随想录Day21
LeetCode111.给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],

最小深度为2
前序遍历和后序遍历都可以做。
后序遍历,从下往上遍历求高度,不断地往上返回到根节点做+1操作。
整体的逻辑代码:
class Solution { public: int getDepth(TreeNode* node) { if (node == NULL) return 0; int leftDepth = getDepth(node->left); // 左 int rightDepth = getDepth(node->right); // 右 // 中 // 当一个左子树为空,右不为空,这时并不是最低点 //取右子树的最小高度 if (node->left == NULL && node->right != NULL) { return 1 + rightDepth; } // 当一个右子树为空,左不为空,这时并不是最低点 //取左子树最小高度 if (node->left != NULL && node->right == NULL) { return 1 + leftDepth; } int result = 1 + min(leftDepth, rightDepth); return result; } int minDepth(TreeNode* root) { return getDepth(root); } };
左右中。 终止条件是当前节点为空。否则,一直往下遍历遍历到最下面一层,然后往回返值。 只要还有叶子节点存在,就仍要进行遍历操作。
最小值的计算是去左右深度的最小值+1

浙公网安备 33010602011771号