java计算二叉树的层数_二叉树层次如何计算?二叉树是什么?

本文介绍了二叉树的概念,包括满二叉树和完全二叉树,并提供了两种计算二叉树层数的方法:递归和非递归。此外,还详细展示了层次遍历的实现代码,帮助读者深入理解二叉树数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众所周知,树在计算机领域是一种重要的非线性数据结构,直观的看,它还是数据元素按分支关系组织起来的结构呢,那下面小编跟大家带来聊聊一种名叫二叉树的数据结构,一起来看看二叉树层次又是如何计算的呢?

那么何为二叉树呢?是这样的,树是有很多种,

其中每个节点最多只能有两个子节点的叫二叉树,二叉树的子节点又分为左节点和右节点,如果呢,二叉树的所有叶子节点全部都在最后一层, 并且结点总数=2^n-1,

n为层数, 则我们称之为满二叉数,如果该二叉树的所有叶子节点(没有子节点的节点)都在最后一层或者倒数第二层, 而且最后一层的叶子节点在左边连续,

倒数第二层的叶子节点在右边连续, 我们就称之为完全二叉树。

计算二叉树层次示例如下:import java.util.LinkedList;

import java.util.List;

public class BinaryTreeDeep

{

public static void main(String[] args)

{

Tree tree1 = new Tree("1");

Tree tree2 = new Tree("2");

Tree tree3 = new Tree("3");

Tree tree4 = new Tree("4");

Tree tree5 = new Tree("5");

Tree tree7 = new Tree("7");

Tree tree8 = new Tree("8");

Tree tree9 = new Tree("9");

Tree tree10 = new Tree("10");

tree1.setLeft(tree2);

tree1.setRight(tree3);

tree2.setLeft(tree4);

tree3.setRight(tree5);

tree5.setLeft(tree7);

tree7.setLeft(tree8);

tree8.setRight(tree9);

tree4.setRight(tree10);

/*

1

2    3

4         5

10         7

8

9

*/

int deep = getDeep(tree1);

System.out.println("深度(递归)是" + deep);

int deep1 = getDeep1(tree1);

System.out.println("深度(非递归)是" + deep1);

System.out.println("层次遍历是:");

levelTraversal(tree1);

}

private static int getDeep(Tree root)

{

if (null == root)

{

return 0;

}

if (null == root.getLeft() && null == root.getRight())

{

return 1; //如果只有他自己就是1

}

int left = 0;

int right = 0;

if (null != root.getLeft())

{

left = getDeep(root.getLeft());

}

if (null != root.getRight())

{

right = getDeep(root.getRight());

}

int deep = Math.max(left, right) + 1;

return deep;

}

private static int getDeep1(Tree root)

{

if (null == root)

{

return 0;

}

List  nodes = new LinkedList  ();

((LinkedList  ) nodes)

.offer(root);

int current = 0;

int deep = 0;

int levelNodeSize = 0;

while (nodes.size() > 0)

{

levelNodeSize = nodes.size(); //当前层节点的个数

current = 0;

while (current 

{

Tree tmp = ((LinkedList  ) nodes)

.poll();

if (null != tmp.getLeft())

{

((LinkedList  ) nodes)

.offer(tmp.getLeft());

}

if (null != tmp.getRight())

{

((LinkedList  ) nodes)

.offer(tmp.getRight());

}

current++;

}

deep++;

}

return deep;

}

private static void levelTraversal(Tree root)

{

List  nodes = new LinkedList  ();

((LinkedList  ) nodes)

.offer(root);

while (!nodes.isEmpty())

{

Tree tmp = ((LinkedList  ) nodes)

.poll();

System.out.print(tmp.getRoot() + " ");

if (null != tmp.getLeft())

{

((LinkedList  ) nodes)

.offer(tmp.getLeft());

}

if (null != tmp.getRight())

{

((LinkedList  ) nodes)

.offer(tmp.getRight());

}

}

System.out.println("");

}

}

class Tree

{

private String root;

private Tree left;

private Tree right;

public Tree(String root)

{

this.root = root;

}

public String getRoot()

{

return root;

}

public void setRoot(String root)

{

this.root = root;

}

public Tree getLeft()

{

return left;

}

public void setLeft(Tree left)

{

this.left = left;

}

public Tree getRight()

{

return right;

}

public void setRight(Tree right)

{

this.right = right;

}

}

那么以上就是有关二叉树的所有内容了,如果还想了解更多java一些知识问答那么记得关注本站消息哦,更多精彩内容等你来了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值