全二叉树展示
- 前根序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。遍历的顺序为:ABDGHCEIF
2.中根序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。遍历的顺序为:GDHBAEICF
3.后根序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。遍历的顺序为:GHDBIEFCA
package com.datastructure;
/**
* Created by silentwolf on 2017/4/18.
*/
/**
* 需求:
* 1、使用链表来存储二叉树
* 2、实现二叉树的创建、前序遍历、中序遍历和后序遍历
*
* 步骤:
* 1、建立Node节点的类,设置leftChild,rightChild,data属性
* 2、建立数组,使用递归创建二叉树,方法为buildTree()
* 3、main函数中调用buildTree(),第一次确定根节点数据
* 4、main函数中调用buildTree(),第二次确定根节点的左节点还是右节点
* 5、循环第4部,再buildTree()使用递归,判断节点数据的左节点还是右节点
* 6、4,5步骤之后,链表来存储二叉树完成
* 7、递归遍历:前序、中序、后续节点
**/
public class BinTreeInt {
private Node root;
/**
* 创建内部节点类
**/
private class Node{
// 左节点
private Node leftChild;
// 右节点
private Node rightChild;
// 节点对应的值
private int data;
public Node(int data){
this.leftChild = null;
this.rightChild = null;
this.data = data;
}
}// class Node
public BinTreeInt(){
root = null;
}
/*
*递归:创建二叉树
* */
public void buildTree(Node node ,int data){
if (root == null){// 如果根节点为空,创建根节点
root = new Node(data);
}else{
if(data <node.data){
//插入到左子树
System.out.println("node.data");
if(node.leftChild == null){
//左节点为空,直接创建值为data的左节点
node.leftChild = new Node(data);
}else{
//左节点不为空,调用buildTree函数插到左子树中
buildTree(node.leftChild,data);
}
}else{
//插入到右子树
if(node.rightChild == null){
node.rightChild = new Node(data);
}else{
buildTree(node.rightChild,data);
}
}
}
}
/*
*递归:前序遍历二叉树
* */
public void preOrder(Node node){
if(node != null){
System.out.print(node.data);
preOrder(node.leftChild);
preOrder(node.rightChild);
}
}
/*
*递归:中序遍历二叉树
* */
public void inOrder(Node node){
if(node != null){
inOrder(node.leftChild);
System.out.print(node.data);
inOrder(node.rightChild);
}
}
/*
*递归:后序遍历二叉树
* */
public void postOrder(Node node){
if(node != null){
postOrder(node.leftChild);
postOrder(node.rightChild);
System.out.print(node.data);
}
}
public static void main(String ars[]){
int[] a={2,4,12,45,21,6,111};
BinTreeInt binTree = new BinTreeInt();
for(int i = 0; i<a.length; i++){
binTree.buildTree(binTree.root, a[i]);
}
System.out.print("前序遍历");
binTree.preOrder(binTree.root);
System.out.println("");
System.out.print("中序遍历");
binTree.inOrder(binTree.root);
System.out.println("");
System.out.print("后序遍历");
binTree.postOrder(binTree.root);
}
}
执行结果:
前序遍历241264521111
中序遍历246122145111
后序遍历621111451242
如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!