leetcode 111 --- 二叉树最小深度

1 题目

求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。

2 解法

2.1 递归方法

要找到最小深度,首先要确定有根到叶的第一个叶节点,也就是一层一层确定.所以有:

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if (root == NULL)
            return 0;
        if (root->left == NULL && root->right == NULL)
            return 1;
        if (root->left == NULL && root->right != NULL)
            return 1 + run(root->right);
        if (root->left != NULL && root->right == NULL)
            return 1 + run(root->left);
        return 1 + (run(root->left) < run(root->right) ?
            run(root->left) : run(root->right));
    }

性能太差:

2.2 非递归方法

用队列的方式, 先把每一层的节点放进队列里面,然后在把子节点放进队列里面,并循环检查头节点是否为叶节点.

代码:

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    int run(TreeNode* root) {
        // write code here
        if (root == nullptr)
            return 0;
        queue<TreeNode*> tmpQ;
        tmpQ.push(root);
        int depth = 1;
        while (!tmpQ.empty()) {
            int sum = tmpQ.size();
            for (int i = 0; i < sum; i ++) {
                TreeNode* tmp = tmpQ.front();
                tmpQ.pop();
                if (tmp->left == nullptr && tmp->right == nullptr)
                    return depth;
                if (tmp->left != nullptr)
                    tmpQ.push(tmp->left);
                if (tmp->right != nullptr)
                    tmpQ.push(tmp->right);
            }
            depth ++;
        }
    }
};

性能比递归好了不少:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值