leetcode第一刷_Minimum Depth of Binary Tree

LeetCode最小深度二叉树
本文介绍了一种使用层序遍历解决LeetCode中最小深度二叉树问题的方法,并提出了两种实现方案:一是利用队列加入特殊元素进行层级划分;二是采用双层vector结构进行交替遍历。

非常easy的题目。只是还是认为要说一下。

最小深度。非常快想到bfs,层序遍历嘛。本科的时候实在是没写过多少代码,一開始竟然想不到怎么保存一层的信息。后来想到能够压入一个特殊的对象,每次到达这个对象就知道是一层了。我用的是空指针。认为这个适用性还是不错的。一层的节点入队结束后,应该压入一个NULL。当一层的节点都处理完。遇到NULL的时候,要在队列尾部再入队一个NULL,这是后一层的分界线嘛。

昨天在还有一道题上看到了还有一种做法。用一个数据结构vector<set<*> >(2)。当然vector里面包裹的是什么结构体并不重要,仅仅要能够高速的压入和顺序訪问就可以。vector的维度是二维的,保存当前层和上一层的对象。然后用两个相互排斥int值cur和pre来保存正在訪问和上一次訪问的vector,每一次遍历,扫描pre层。发现的节点增加到cur层,下次循环时,交换一下。

我认为这是一种非常好的思路,尽管用在普通的层序遍历上有杀鸡用牛刀了。

class Solution {
public:
    int minDepth(TreeNode *root) {
        if(root == NULL)
            return 0;
        int res = 1;
        queue<TreeNode*> ceng;
        TreeNode *pNode;
        ceng.push(root);
        ceng.push(NULL);
        while(!ceng.empty()){
            if(ceng.front() == NULL){
                res++;  
                ceng.pop();
                ceng.push(NULL);
            }
            pNode = ceng.front();
            ceng.pop();
            if(!pNode->left&&!pNode->right)
                return res;
            if(pNode->left)
                ceng.push(pNode->left);
            if(pNode->right)
                ceng.push(pNode->right);
        }
        return res;
    }
};


posted on 2017-06-29 08:37 mthoutai 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/mthoutai/p/7092562.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值