java二叉树遍历算法_java二叉树遍历算法有哪些?如何操作?

大家是否有了解过算法呢?今天小编讲的内容知识则是Java的二叉树算法,希望大家能从今天这篇文章收获到知识哦,接下来就让我们一起来了解下吧。

二叉树的遍历有三种方式分别为如下:

先序遍历:遍历顺序规则为(根左右)

中序遍历:遍历顺序规则为(左根右)

后序遍历:遍历顺序规则为(左右根)

问题来了,什么是(根左右)呢?就是先遍历根,再遍历左孩子,最后遍历右孩子。不知道这样解释是否通俗易懂呢?

它的前序遍历顺序为:ABDGHCEIF(规则是先是根结点,再前序遍历左子树,再前序遍历右子树)

它的中序遍历顺序为:GDHBAEICF(规则是先中序遍历左子树,再是根结点,再是中序遍历右子树)

它的后序遍历顺序为:GHDBIEFCA(规则是先后序遍历左子树,再是后序遍历右子树,再是根结点)

接下来通过代码的方式进行展示:public class BTree

{

public int data;

public BTree father, leftSon, rightSon;

public static BTree root;

public boolean hasleft()

{

return leftSon != null;

}

public boolean hasright()

{

return rightSon != null;

}

public BTree()

{}

//直接插入方法

public void insert(int data)

{

if (root == null)

{

root = new BTree();

root.data = data;

return;

}

insert(data, root);

}

//递归插入方法

public void insert(int data, BTree father)

{

//插入的数据和父节点比较大小

int compare = data - father.data;

if (compare == 0)

{

return;

}

//放在右边

if (compare > 0)

{

//判断有没有右孩子,如果有则递归下一级

if (father.hasright())

{

insert(data, father.rightSon);

}

else

{

//创建一个新的节点没有左孩子

father.rightSon = new BTree();

father.rightSon.data = data;

father.rightSon.father = father;

}

}

if (compare 

{

//判断有没有左孩子,如果有则递归下一级

if (father.hasleft())

{

insert(data, father.leftSon);

}

else

{

father.leftSon = new BTree();

father.leftSon.data = data;

father.leftSon.father = father;

}

}

}

//先序遍历

public static void query1()

{

if (root == null)

{

return;

}

query1(root);

}

public static void query1(BTree tree)

{

if (tree == null)

{

return;

}

System.out.print(tree.data + "  ");

if (tree.hasleft())

{

query1(tree.leftSon);

}

if (tree.hasright())

{

query1(tree.rightSon);

}

}

//中序遍历

public static void query2()

{

if (root == null)

{

return;

}

query2(root);

}

public static void query2(BTree tree)

{

if (tree == null)

{

return;

}

if (tree.hasleft())

{

query2(tree.leftSon);

}

System.out.print(tree.data + "  ");

if (tree.hasright())

{

query2(tree.rightSon);

}

}

//后序遍历

public static void query3()

{

if (root == null)

{

return;

}

query3(root);

}

public static void query3(BTree tree)

{

if (tree == null)

{

return;

}

if (tree.hasleft())

{

query3(tree.leftSon);

}

if (tree.hasright())

{

query3(tree.rightSon);

}

System.out.print(tree.data + "  ");

}

public static void main(String[] args)

{

BTree tree = new BTree();

tree.insert(56);

tree.insert(23);

tree.insert(98);

tree.insert(33);

tree.insert(54);

tree.insert(44);

tree.insert(66);

tree.insert(53);

tree.insert(75);

tree.insert(11);

tree.insert(32);

tree.insert(76);

BTree.query1();

System.out.println();

BTree.query2();

System.out.println();

BTree.query3();

}

}

结果为:

56 23 12 54 53 45 32 98 67 76 99

12 23 32 45 53 54 56 67 76 98 99

12 32 45 53 54 23 76 67 99 98 56

以上就是今天所讲的二叉树相关的Java常见问答,如果想要了解跟多,请继续关注本网站。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值