二叉树的遍历介绍及代码
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
首先我们先根据前序可以判断出根节点为A,然后通过前序和后序可以画出来二叉树的分布图,再根据后序遍历的规则得出后序遍历为:H,I,D,J,K,E,B,L,M,F,N,O,G,C,A
2.代码介绍
每个数据添加进二叉树时,也和链表类似,需要创建节点,不同的是,前者有两个指针域,代表左右子树
示例:
建立如上题树
上代码如下图
3.二叉树的遍历
二叉树遍历需要记忆的就前中后序三种遍历,这三种遍历的前还是中还是后其实是以访问数据域的顺序决定的
3.1 先序
3.2中序
3.3后序
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.输出结果