package acm.result.test1;
/**
* @author BTiger
*
*/
public class Main {
/**
* 二叉樹遍歷,三種方法
*
* @param args
*/
public static void main(String[] args) {
Tree tree = getTree();
Node root = tree.getRoot();
// 先根遍歷
System.out.println("先根遍歷");
rootFirst(root);
System.out.println();
// 中根遍歷
System.out.println("中根遍歷");
middleFirst(root);
System.out.println();
// 後根遍歷
System.out.println("後根遍歷");
rootLast(root);
}
/**
* 先根遍歷
*
* @param root
*/
private static void rootFirst(Node root) {
System.out.print(root.getData()+" ");// 打印根節點
if (root.getLeftNode() != null) {// 打印左節點
rootFirst(root.getLeftNode());
}
if (root.getRightNode() != null) {// 打印右節點
rootFirst(root.getRightNode());
}
}
/**
* 中根遍歷
*
* @param root
*/
private static void middleFirst(Node root) {
if (root.getLeftNode() != null) {// 打印左節點
middleFirst(root.getLeftNode());
}
System.out.print(root.getData()+" ");// 打印根節點
if (root.getRightNode() != null) {// 打印右節點
middleFirst(root.getRightNode());
}
}
/**
* 後根遍歷
*
* @param root
*/
private static void rootLast(Node root) {
if (root.getLeftNode() != null) {// 打印左節點
rootLast(root.getLeftNode());
}
if (root.getRightNode() != null) {// 打印右節點
rootLast(root.getRightNode());
}
System.out.print(root.getData()+" ");// 打印根節點
}
/**
* 構造二叉樹
*
* @return
*/
private static Tree getTree() {
Node root = new Node();
Node b = new Node();
Node c = new Node();
Node d = new Node();
Node e = new Node();
Node f = new Node();
Node g = new Node();
Node h = new Node();
root.setData("A");
b.setData("B");
c.setData("C");
d.setData("D");
e.setData("E");
f.setData("f");
g.setData("G");
h.setData("H");
root.setLeftNode(b);
root.setRightNode(c);
b.setLeftNode(d);
d.setRightNode(g);
c.setLeftNode(e);
c.setRightNode(f);
f.setLeftNode(h);
Tree tree = new Tree();
tree.setRoot(root);
return tree;
}
}
class Tree {
public Node root = null;
public Node getRoot() {
return root;
}
public void setRoot(Node root) {
this.root = root;
}
public boolean isEmpty() {
return this.root == null;
}
}
class Node {
public String data;
public Node leftNode = null, rightNode = null;
public boolean isLeaf() {
return this.leftNode == null && this.rightNode == null;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
}