package com.answer.binaryTree;
import java.util.ArrayList;
import java.util.List;
public class Tree {
private static class Node{
private int parent;
private String data;
public Node(){}
public Node(String data){
this.data=data;
}
public Node(String data,int parent){
this.data=data;
this.parent=parent;
}
}
private int DEFAULT_SIZE=16;//默认容器大小
private int treeSize=0;
private Node[] nodes;//存放节点
private int nodeNum;//记录节点个数
public Tree(String data){
this.treeSize=DEFAULT_SIZE;
nodes=new Node[treeSize];
nodes[0]=new Node(data,-1);
nodeNum++;
}
public Tree(String data,int size){
this.treeSize=size;
nodes=new Node[treeSize];
nodes[0]=new Node(data,-1);
nodeNum++;
}
public int pos(Node node){
for(int i=0;i<treeSize;i++){
if(node.equals(nodes[i])){
return i;
}
}return -1;
}
public void add(String data,Node parent){
for(int i=0;i<treeSize;i++){
if(nodes[i]==null){
nodes[i]=new Node(data,pos(parent));
nodeNum++;
return;
}
}
}
public Node root(){
return nodes[0];
}
public List<Node> getChild(Node parent){
ArrayList<Node> list=new ArrayList<>();
for(int i=0;i<treeSize;i++){
if(nodes[i]!=null&&nodes[i].parent==pos(parent)){
list.add(nodes[i]);
}
}return list;
}
public int deep(){
int max=0;
for(int i=0;i<treeSize&&nodes[i]!=null;i++){
int def=1;
int father=nodes[i].parent;
while(father!=-1&&nodes[father]!=null){
father=nodes[father].parent;
def++;
}
if(max<def){
max=def;
}
}return max;
}
public boolean empty(){
return nodeNum==0;
}
public Node getPar(Node node){
return nodes[node.parent];
}
public static void main(String[] args) {
Tree tree=new Tree("Root");
Node root=tree.root();
tree.add("A",root);
tree.add("B",root);
System.out.println(tree.deep());
System.out.println(tree.empty());
List<Node> list=tree.getChild(root);
for(Node n:list){
System.out.println(n.data);
}
System.out.println(tree.getPar(list.get(0)).data);
}
}