java 二叉树遍历 缩写_java二叉树的遍历算法代码是什么?

java最重要的就是会写代码并且保证代码成功的运行,这样才是一个完整的代码,最近有人想了解java二叉树的知识,想知道java二叉树的遍历算法代码是什么?那么接下来,我们就来给大家讲解一下这方面的内容。

代码如下:package package2;

public class BinaryTree

{

int data; //根节点数据

BinaryTree left; //左子树

BinaryTree right; //右子树

public BinaryTree(int data) //实例化二叉树类

{

this.data = data;

left = null;

right = null;

}

public void insert(BinaryTree root, int data)

{ //向二叉树中插入子节点

if (data > root.data) //二叉树的左节点都比根节点小

{

if (root.rightnull)

{

root.right = new BinaryTree(data);

}

else

{

this.insert(root.right, data);

}

}

else

{ //二叉树的右节点都比根节点大

if (root.leftnull)

{

root.left = new BinaryTree(data);

}

else

{

this.insert(root.left, data);

}

}

}

}

当建立好二叉树类后可以创建二叉树实例,并实现二叉树的先根遍历,中根遍历,后根遍历,代码如下:package package2;

public class BinaryTreePreorder

{

public static void preOrder(BinaryTree root)

{ //先根遍历

if (root != null)

{

System.out.print(root.data + "-");

preOrder(root.left);

preOrder(root.right);

}

}

public static void inOrder(BinaryTree root)

{ //中根遍历

if (root != null)

{

inOrder(root.left);

System.out.print(root.data + "–");

inOrder(root.right);

}

}

public static void postOrder(BinaryTree root)

{ //后根遍历

if (root != null)

{

postOrder(root.left);

postOrder(root.right);

System.out.print(root.data + "—");

}

}

public static void main(String[] str)

{

int[] array = {12 , 76, 35, 22, 16 , 48, 90, 46, 9, 40};

BinaryTree root = new BinaryTree(array[0]); //创建二叉树

for (int i = 1; i 

{

root.insert(root, array[i]); //向二叉树中插入数据

}

System.out.println(“先根遍历:”);

preOrder(root);

System.out.println();

System.out.println(“中根遍历:”);

inOrder(root);

System.out.println();

System.out.println(“后根遍历:”);

postOrder(root);

当运行上面的程序后结果如下:

先根遍历:

12-9-76-35-22-16-48-46-40-90-

中根遍历:

9–12–16–22–35–40–46–48–76–90–

后根遍历:

9—16—22—40—46—48—35—90—76—12—

二叉树的实现方式有哪些?

1.第一类数组实现

用数组root[]存储结点值,在这种实现当中,对于编号为k的节点,其左子节点的编号为2*k,右子节点的编号为2*k +

1,另外确定根节点的编号为1.毫无疑问,这种实现极易产生巨大的空间浪费,比如对于一个只有一条链的树,假设该树含有31个节点,存储这31个节点却需要开一个2^30的数组,因此此方法较少使用。(此处的2^30是指数值,由2k计算出来的数值过大)

2.结构体+指针实现

用结构体指针u来表示一个节点,其中u->v表示该节点的权值,u->left和u->right分别指向该节点的左右子节点,初始化全部为NULL,若需用到该节点,则申请空间,否则视为无子节点!就这样互相联系成一颗结构体指针二叉树!节省空间,但是容易出现指针悬挂或者未知的指针内存错误。

3..第二类数组实现

对于一棵有n个节点树,只需要开一个大小为n的数组,节点按照出现顺序依次编号,这么一来,每个节点的左右节点的编号就无法通过2*k,2*k+1的形式来直接确定了,这时就需要数组lch[maxn]

, rch[maxn];其中lch[u]表示u节点的左子节点的编号,因此通过u =

lch[u]就可以访问到u节点的左子节点,rch[u]的含义同理。另外,用value[u]表示编号为u节点的权值,如此一来,申请新节点的newnode函数与初始化的newtree函数写法就变得不同了,具体见代码。(此处只需结点个数个数组即可,并不计算数值!)

从文章中我们可以看出,java二叉树的相关内容还是很重要的,这也是在工作中会运用到的,所以这些代码大家一定要熟知并会运用哦!最后大家如果想要了解更多java常见问题知识,敬请关注奇Q工具网。

推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值