TreeNode.java
package com.wanali.java_ds.ergodictree;
public class TreeNode {
public Object data;
public TreeNode lchild;
public TreeNode rchild;
// 构造空结构体
public TreeNode() {
this(null);
}
// 左右节点为空
public TreeNode(Object data) {
this.data = data;
}
// 定义非空节点
public TreeNode(Object data, TreeNode lchild, TreeNode rchild) {
this.data = data;
this.lchild = lchild;
this.rchild = rchild;
}
}
Tree.java
package com.wanali.java_ds.ergodictree;
public class Tree {
TreeNode root;
public Tree() {
this(null);
}
public Tree(TreeNode root) {
this.root = root;
}
//
public void preRootTraverse(TreeNode T) {
if (T != null) {
System.out.print(T.data);
preRootTraverse(T.lchild);
preRootTraverse(T.rchild);
}
}
public void inRootTraverse(TreeNode T) {
if (T != null) {
inRootTraverse(T.lchild);
System.out.print(T.data);
inRootTraverse(T.rchild);
}
}
public void postRootTarverse(TreeNode T) {
if (T != null) {
postRootTarverse(T.lchild);
postRootTarverse(T.rchild);
System.out.print(T.data);
}
}
public TreeNode getRoot() {
return root;
}
public void setRoot(TreeNode root) {
this.root = root;
}
}
TestTree.java
package com.wanali.java_ds.ergodictree;
public class TestTree {
public Tree creatTree() {
TreeNode d = new TreeNode('D');
TreeNode g = new TreeNode('G');
TreeNode h = new TreeNode('H');
TreeNode e = new TreeNode('E');
TreeNode f = new TreeNode('F', null, h);
TreeNode b = new TreeNode('B', d, f);
TreeNode c = new TreeNode('C', f, null);
TreeNode a = new TreeNode('A', b, c);
return new Tree(a);// 创建根节点为a的二叉树
}
public static void main(String[] args) {
TestTree testTree = new TestTree();
Tree tree = testTree.creatTree();
TreeNode root = tree.root;// 获得树的根节点
System.out.println("先序遍历:");
tree.preRootTraverse(root);
System.out.println("\n" + "中序遍历:");
tree.inRootTraverse(root);
System.out.println("\n" + "后序遍历:");
tree.postRootTarverse(root);
}
}
运行结果如下: