package com.demo.demo;
class Node{
private E data;//节点数据
private Node<E> lChild;//定义节点的左孩子
private Node<E> rChild;//定义节点的右孩子
//设置构造函数
public Node(E date,Node<E> lChild,Node<E>rChild){
data=date;
this.lChild=null;
this.rChild=null;
}
//设置这个节点的节点信息
public void setData(E data) {
this.data = data;
}
public E getData() {
return data;
}
//获得这个节点的左子树
public Node getLChild(){
return lChild;
}
//获得这个节点的右子树
public Node getRChild(){
return rChild;
}
//设置这个节点的左子树
public void setlChild(Node <E> lChild) {
this.lChild = lChild;
}
//设置这个节点的右子树
public void setRChild(Node <E> rChild){
this.rChild=rChild;
}
}
public class DemoTree {
/*
使用java语言实现一个二叉树
*/
//定义一个节点结构
public Node init() {
//注意必须逆序建立,先建立子节点,再逆序往上建立,因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
Node H = new Node("A", null, null);
Node D = new Node("D", H, null);
Node E = new Node("E", null, null);
Node B = new Node("B", D, E);
Node F = new Node("F", null, null);
Node G = new Node("7", null, null);
Node C = new Node("C", F, G);
Node A = new Node("A", B, C);
return A; //返回根节点
}
//打印节点信息
public void printNode(Node <E>node){
System.out.print(node.getData());
}
//使用递归实现遍历
//先序遍历
public void theFirstTraversal(Node root) { //先序遍历
printNode(root);
if (root.getLChild() != null) { //使用递归进行遍历左孩子
theFirstTraversal(root.getLChild() );
}
if (root.getLChild() != null) { //递归遍历右孩子
theFirstTraversal(root.getRChild());
}
}
public void theInOrderTraversal(Node root) { //中序遍历
if (root.getLChild() != null) {
theInOrderTraversal(root.getLChild());
}
printNode(root);
if (root.getRChild() != null) {
theInOrderTraversal(root.getRChild());
}
}
public void thePostOrderTraversal(Node root) { //后序遍历
if (root.getLChild() != null) {
thePostOrderTraversal(root.getLChild());
}
if(root.getRChild() != null) {
thePostOrderTraversal(root.getRChild());
}
printNode(root);
}
public static void main(String[] args) {
DemoTree <Character> dt = new DemoTree();
Node <Character>dePro= dt.init();
System.out.println("二叉树的先序遍历");
dt.theFirstTraversal(dePro);
}
}