package iterator;
import java.util.ArrayList;
import java.util.List;
public class BinaryTree {
private BinaryTree leftNode; //左子节点
private BinaryTree rightNode; //右子节点
private Object value; //值
public BinaryTree getLeftNode() {
return leftNode;
}
public void setLeftNode(BinaryTree leftNode) {
this.leftNode = leftNode;
}
public BinaryTree getRightNode() {
return rightNode;
}
public void setRightNode(BinaryTree rightNode) {
this.rightNode = rightNode;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
/**
* 按照左小(或相等)右大的规律添加节点
* @param value
*/
public void add(Object value){
if(getValue() == null){
setValue(value);
}else {
if((int)getValue() >= (int)value){
if(getLeftNode() == null){
setLeftNode(new BinaryTree());
}
getLeftNode().add(value);
}else {
if(getRightNode() == null){
setRightNode(new BinaryTree());
}
getRightNode().add(value);
}
}
}
//中根序遍历
public List<Object> LDR(){
List<Object> values = new ArrayList<Object>();
//左
if(getLeftNode() != null){
values.addAll(getLeftNode().LDR());
}
//根
values.add(getValue());
//右
if(getRightNode() != null){
values.addAll(getRightNode().LDR());
}
return values;
}
//先根序遍历
public List<Object> DLR(){
List<Object> values = new ArrayList<Object>();
//根
values.add(getValue());
//左
if(getLeftNode() != null){
values.addAll(getLeftNode().DLR());
}
//右
if(getRightNode() != null){
values.addAll(getRightNode().DLR());
}
return values;
}
//后根序遍历
private List<Object> LRD() {
List<Object> values = new ArrayList<Object>();
//左
if(getLeftNode() != null){
values.addAll(getLeftNode().LRD());
}
//右
if(getRightNode() != null){
values.addAll(getRightNode().LRD());
}
//根
values.add(getValue());
return values;
}
public static void main(String[] args) {
int[] array = new int[]{5,3,7,6,4,1,9,2,8,0};
BinaryTree bTree = new BinaryTree();
for (int i : array) {
bTree.add(i);
}
List<Object> ldr = bTree.LDR();
System.out.println("中根序遍历(左根右):"+ldr);
List<Object> dlr = bTree.DLR();
System.out.println("先根序遍历(根左右):"+dlr);
List<Object> lrd = bTree.LRD();
System.out.println("后根序遍历(左右根):"+lrd);
}
}