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

leetcode 111、、Minimum Depth of a Binary Tree、难度easy

0. 题干

// 根结点(root)是树的一个组成部分,也叫树根。所有非空的二叉树中,都有且仅有一个根结点简介。
 //它是同一棵树中除本身外所有结点的祖先,没有父结点。

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

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

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

示例:

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

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

返回它的最小深度 2.

1. 代码

class Solution {
public:
	int minDepth(TreeNode* root) {
		queue<TreeNode*>q; //创建队列q
		int level= 0; //level为深度
		if (root)
			q.push(root);
		
		while(q.size()) {
			level++;
			int n = q.size();
			
			for (int i = 0; i< n; i++) {
				TreeNode* cur = q.front();
				q.pop();
				if( !cur->left && !cur->right) //如果根结点的左右孩子都不存在,那么直接深度
					return level;
					
				if(cur->left)
					q.push(cur->left);
				if(cur->right)
					q.push(cur->right);
			}
		}
		
		return level;
	}
};

2. 简叙思路

代码比较简单,稍微说下思路;

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

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

先存根节点到队列q里面,其值为3,q.size()为1,然后把存到队列里面的根节点pop掉;

依次存放结点值为9和20的结点,q.size()值为2,然后发现值为9的结点的左右孩子都没有;
此时就找到了最小深度,level返回2。

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