[Tree Breadth First Search] 二叉树的最大深度

leetcode 104、Maximum Depth of Binary Tree、难度easy

0. 题干

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:
给定二叉树 [3,9,20,null,null,15,7],

[Tree Breadth First Search] 二叉树的最大深度_第1张图片

返回它的最大深度 3 。

1. 代码

// 广度优先:使用队列

class Solution {
public:
    int maxDepth(TreeNode* root) {
         if(root==NULL) return 0;
         queue<TreeNode*> q;
		 
         if (root)
			q.push(root);
	
         int level=0;
         while(q.size())
         {
             level++;
             int num=q.size();
             for(int i=0;i<num;i++)
             {
                TreeNode* cur=q.front();
                q.pop();
                if(cur->left) 
					q.push(cur->left);
                if(cur->right) 
					q.push(cur->right);
             }
         }
         return level;         
    }
};

2. 简述代码流程

先存根节点root到队列里面去,然后level值为1;
找根节点的左右结点存到队列里面,level值为2,
此时发现值为9的结点的左右孩子不存在,那就别管,再此进入for(int i=0;i 循环,把结点值为20的左右孩子存到队列里面,当然之前要pop掉值为20的结点,
此时level的值为3,发现值为15、以及值为7的结点都没有左右孩子,依次pop掉,
队列为空,跳出while(q.size()),代码运行结束,返回 level值为3。

你可能感兴趣的:(C++刷算法)