二叉树
关于二叉树的相关内容,这里收藏几个相关的博客,可以了解一下:
Java数据结构与算法——二叉树及操作(包括二叉树遍历)
一篇文章搞定面试中的二叉树题目(java实现)
二叉树的广度优先遍历和深度优先遍历(Java实现)
二叉树的深度
首先定义了一个二叉树节点:
public class TreeNode {
TreeNode left;
TreeNode right;
int value;
public TreeNode(int value){
this.value = value;
}
}
然后创建一个二叉树,这里仅为了节点创建的方便,创建了一个满二叉树
private static TreeNode createBinaryTree(){
int[] data = {1,2,3,4,5,6,7};
List<TreeNode> nodes = new ArrayList<>();
for (int value:data){
nodes.add(new TreeNode(value));
}
for (int i = 0; i < nodes.size()/2; i++) {
nodes.get(i).left=nodes.get(i*2+1);
if(i*2+2<nodes.size()){
nodes.get(i).right=nodes.get(i*2+2);
}
}
return nodes.get(0);
}
利用递归
private static int getTreeMaxDepth(TreeNode root){
if(root == null){
return 0;
}
int left = getTreeMaxDepth(root.left);
int right = getTreeMaxDepth(root.right);
return Math.max(left, right)+1;
}
不用递归
可以使用二叉树的层次遍历
public static int getTreeMaxDepth(TreeNode root) {
if (root == null) {
return 0;
}
int depth = 0;
//定义一个队列
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
// 当前层中元素的数量
int length = queue.size();
while (length-- > 0) {
// 取出队列中每一层所有的节点,并将对应节点的子节点放入队列中
TreeNode node = queue.poll();
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.right);
}
}
depth++;
}
return depth;
}