求给定二叉树的最大深度
题目描述
求给定二叉树的最大深度,
最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。
示例1
输入 {1,2}
返回值 2
示例2
输入 {1,2,3,4,#,#,5}
返回值 3
算法思想:
递归法、使用队列层序遍历二叉树并记录深度
package 牛客.树;
import java.util.LinkedList;
import java.util.Queue;
/*
* @Author helen
* @Date 2021/4/15 14:28
* @Descriptions
* 题目描述
求给定二叉树的最大深度,
最大深度是指树的根结点到最远叶子结点的最长路径上结点的数量。
示例1
输入 {1,2}
返回值 2
示例2
输入 {1,2,3,4,#,#,5}
返回值 3
*/
public class 二叉树最大深度 {
//递归法:
public int maxDepth (BTreeNode<Integer> root) {
// write code here
if(root == null)
return 0;
else
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
}
//使用队列层序遍历法:
public int maxDepth02(BTreeNode<Integer> root){
Queue<BTreeNode<Integer>> queue = new LinkedList<>();
int count = 0; //记录深度
queue.add(root);
while (!queue.isEmpty()) {
int elementSize = queue.size(); //记录当前层的结点数
for (int i = 0; i < elementSize; i++) {
BTreeNode<Integer> element = queue.element();
if(element.left != null)
queue.add(element.left);
if(element.right != null)
queue.add(element.right);
queue.poll();
}
count++;
}
return count;
}
public static void main(String[] args) {
二叉树最大深度 obj = new 二叉树最大深度();
BTree<Integer> tree = new BTree<>();
for (int i = 0; i < 10; i++) {
tree.RandomCreatTree(tree.root,i);
}
int i = obj.maxDepth(tree.root);
System.out.println(i);
System.out.println(obj.maxDepth02(tree.root));
}
}