先序中序后序遍历二叉树_(转)二叉树的先序中序后序介绍及代码

本文介绍了如何通过前序和中序遍历来确定二叉树结构,并提供了Java代码实现。重点讲解了先序、中序和后序遍历的区别,以及如何用这些遍历来构建二叉树。

二叉树的遍历介绍及代码

1.二叉树的介绍
例子:已知前序中序遍历求后序遍历
前序:A,B,D,H,I,E,J,K,C,F,L,M,G,N,O
中序:H,D,I,B,J,E,K,A,L,F,M,C,N,G,O

fb6ad801d0f0a0c312dacc2b50ea3c78.png

首先我们先根据前序可以判断出根节点为A,然后通过前序和后序可以画出来二叉树的分布图,再根据后序遍历的规则得出后序遍历为:H,I,D,J,K,E,B,L,M,F,N,O,G,C,A

2.代码介绍

每个数据添加进二叉树时,也和链表类似,需要创建节点,不同的是,前者有两个指针域,代表左右子树

d9264b29b2fe46b9f5f783d85210d69c.png

示例:

建立如上题树

61795f98c853ef8f438a100ddc836068.png
f96a5c53fa47f3dde2506d2bbe80c6bc.png

上代码如下图

9817e7a126a49ea99dc8097462706f50.png

3.二叉树的遍历

二叉树遍历需要记忆的就前中后序三种遍历,这三种遍历的前还是中还是后其实是以访问数据域的顺序决定的

3.1 先序

73de3382790dfc334edb7572f7a5a972.png

3.2中序

d40c5e770691612d18b71f27f519cf23.png

3.3后序

a31367e0ddc00956d669de2c7817532f.png

4.完整代码

class BianLi {

/**

* 先序遍历

*/

public void xianxu(TreeNode root) {

if (root != null)

System.out.print(root.getData());

if (root.getLeft() != null)

xianxu(root.getLeft());

if (root.getRight() != null)

xianxu(root.getRight());

}

/**

* 中序遍历

*/

public void zhongxu(TreeNode root) {

if (root.getLeft() != null)

zhongxu(root.getLeft());

if (root != null)

System.out.print(root.getData());

if (root.getRight() != null)

zhongxu(root.getRight());

}

/**

* 后序遍历

*/

public void houxu(TreeNode root) {

if (root.getLeft() != null)

houxu(root.getLeft());

if (root.getRight() != null)

houxu(root.getRight());

if (root != null)

System.out.print(root.getData());

}

}

public class MainClass {

public static void main(String[] args) {

TreeNode root = null;

root = new TreeNode();

root.setData("A");

TreeNode l1 = new TreeNode();

l1.setData("B");

root.setLeft(l1);

TreeNode r1 = new TreeNode();

r1.setData("C");

root.setRight(r1);

TreeNode l1l2 = new TreeNode();

l1l2.setData("D");

l1.setLeft(l1l2);

TreeNode l1r2 = new TreeNode();

l1r2.setData("E");

l1.setRight(l1r2);

TreeNode l1l3 = new TreeNode();

l1l3.setData("H");

l1l2.setLeft(l1l3);

TreeNode l1r3 = new TreeNode();

l1r3.setData("I");

l1l2.setRight(l1r3);

TreeNode r2l1 = new TreeNode();

r2l1.setData("J");

l1r2.setLeft(r2l1);

TreeNode r2r1 = new TreeNode();

r2r1.setData("K");

l1r2.setRight(r2r1);

TreeNode r1l1 = new TreeNode();

r1l1.setData("F");

r1.setLeft(r1l1);

TreeNode r1l2 = new TreeNode();

r1l2.setData("L");

r1l1.setLeft(r1l2);

TreeNode r1r2 = new TreeNode();

r1r2.setData("M");

r1l1.setRight(r1r2);

TreeNode r1r3 = new TreeNode();

r1r3.setData("G");

r1.setRight(r1r3);

TreeNode r3l1 = new TreeNode();

r3l1.setData("N");

r1r3.setLeft(r3l1);

TreeNode r3r1 = new TreeNode();

r3r1.setData("O");

r1r3.setRight(r3r1);

System.out.println("先序:");

new BianLi().xianxu(root);

System.out.println("中序:");

new BianLi().zhongxu(root);

System.out.println("后序:");

new BianLi().houxu(root);

}

}

5.输出结果

604de23eb228981121af0a5af6fdd6e7.png

原文链接:https://blog.csdn.net/weixin_44410154/article/details/102913541

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值