/**
* 设置结点结构
*/
public static class TreeNode<T> {
T val; // 二叉树的结点数据
TreeNode<T> leftNode; // 二叉树的左子树(左孩子)
TreeNode<T> rightNode; // 二叉树的右子树(右孩子)
public TreeNode(T data,TreeNode<T> left,TreeNode<T> right) {
this.val = data;
this.leftNode = left;
this.rightNode = right;
}
// 获得 & 设置二叉树的结点数据
public T getData(){
return val;
}
public void setData(T data){
this.val = data;
}
// 获得 & 设置二叉树的左子树(左孩子)
public TreeNode getLeftNode(){
return leftNode;
}
public void setLeftNode(TreeNode leftNode){
this.leftNode = leftNode;
}
// 获得 & 设置二叉树的右子树(右孩子)
public TreeNode getRightNode(){
return rightNode;
}
public void setRightNode(TreeNode rightNode){
this.rightNode = rightNode;
}
}
/**
* 作用:构造二叉树
* 注:必须逆序建立,即:先建立子节点,再逆序往上建立
* 原因:非叶子节点会使用到下面的节点,而初始化是按顺序初始化的,不逆序建立会报错
*/
public Node init(){
// 结构如下:(由下往上建立)
// A
// B C
// D E F
// G H I
Node I = new Node("I", null, null);
Node H = new Node("H", null, null);
Node G = new Node("G", null, null);
Node F = new Node("F", null, null);
Node E = new Node("E", null, I);
Node D = new Node("D", G, H);
Node C = new Node("C", E, F);
Node B = new Node("B", D, null);
Node A = new Node("A", B, C);
return A; // 返回根节点
}