- 题目描述:
- 设计思想:
详细操作流程看下图
-视频讲解链接B站视频讲解
- 代码:
c++版本:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int maxDepth(TreeNode* root) {
if(root == NULL) return 0; //根点为空返回0
queue<TreeNode*>q; //开一个队列用于存储遍历树的节点
int res = 0; //用来存最大高度
q.push(root);
int n = 0; //用来存储队列的大小
while(!q.empty()){ //队列不为空就进行如下操作
n = q.size();
for(int i = 0;i < n;i ++){ //将这一层节点的左右孩子全部入队列
TreeNode* node = q.front(); //取出队列的第一个元素
q.pop();
if(node->left) q.push(node->left); //左孩子如果不为空就进队列
if(node->right) q.push(node->right); //右孩子如果不为空就进队列
}
res ++; //每遍历一层res就++
}
return res;
}
};
Java版本:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int maxDepth (TreeNode root) {
if(root == null) return 0; //节点为空返回0
Queue<TreeNode> q = new LinkedList<TreeNode>(); //开一个队列用于存储遍历树的节点
q.add(root);
int n = 0; //用来存储队列的大小
int res = 0; //用来存最大高度
while(!q.isEmpty()){ //队列不为空就进行如下操作
n = q.size();
for(int i = 0;i < n;i ++){
TreeNode node = q.poll();//取出队列的第一个元素
if(node.left != null) q.add(node.left); //左孩子如果不为空就进队列
if(node.right != null) q.add(node.right); //右孩子如果不为空就进队列
}
res ++; //每遍历一层res就++
}
return res;
}
}
Python版本:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
#
# @param root TreeNode类
# @return int整型
#
import queue
class Solution:
def maxDepth(self , root ):
# write code here
if not root : return 0 #节点为空返回0
q = queue.Queue(); #开一个队列用于存储遍历树的节点
q.put(root)
n,res =0,0
while q.qsize() > 0: #队列不为空就进行如下操作
n = q.qsize()
for i in range(n): #将这一层节点的左右孩子全部入队列
node = q.get() #取出队列的第一个元素
if node.left:
q.put(node.left)#左孩子如果不为空就进队列
if node.right:
q.put(node.right)#右孩子如果不为空就进队列
res += 1 #每遍历一层res就++
return res

京公网安备 11010502036488号