非递归求取二叉树的最大/小深度

分层遍历的思路
二叉树分层遍历用到的是BFS(广度优先搜索),显然这必须维护一个队列。但是一个队列只能得到遍历结果,并不能一层一层分开,所以必须使用两个队列curr和next,curr保存当前层的所有结点指针,next保存下一层的结点指针,遍历的过程就是出队列的过程,在对curr出队列的同时将推出来的结点的非空左右子结点压入队列next,直到为空那么当前层遍历完毕,同时下一层的所有结点指针也保存完备了。
最大/小深度:

当出队列操作完成,也就是一层遍历完成,这时候可以记录层数,因此可以通过记录切换的次数得到二叉树的深度。

int levelOrder(TreeNode *root) {
        if (root == nullptr) return 0;
        queue<TreeNode*> q1, q2;//用来切换的两个队列
        q1.push(root);
        TreeNode *curr = nullptr;
        int count = 0;
        while (!q1.empty() || !q2.empty()) {
            if (!q1.empty()) ++count;
            while (!q1.empty()) {
                curr = q1.front();//打印
                q1.pop();
                if (curr->left != nullptr) {
                    q2.push(curr->left);
                }
                if (curr->right != nullptr) {
                    q2.push(curr->right);
                }
                /*
                if (curr->left == nullptr && curr->right == nullptr) {//遇到叶子结点就停止遍历,返回层数(最小深度)
                    return count;
                }*/
            }
            if (!q2.empty()) ++count;
            while (!q2.empty()) {
                curr = q2.front();//打印
                q2.pop();
                if (curr->left != nullptr) {
                    q1.push(curr->left);
                }
                if (curr->right != nullptr) {
                    q1.push(curr->right);
                }
               /*
                if (curr->left == nullptr && curr->right == nullptr) { //返回最小深度
                    return count;
                }
                */
            }
        }
        return count; //返回最大深度
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值