代码随想录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

 

posted @ 2022-11-10 00:29  NobodyHero  阅读(17)  评论(0)    收藏  举报