有问题勿喷(手动狗头)
public class TreeNode<T> {
String key;//节点key
T value;//节点数据
TreeNode<T>[] subNode;//当前节点子节点集
private static final int LEN = 5;//默认子集长度
public TreeNode(T value, String key) {
new TreeNode<T>(value,key,LEN);
}
@SuppressWarnings("unchecked")
public TreeNode(T value, String key, int maxSubNode) {
this.value = value;
this.key = key;
this.subNode = (TreeNode<T>[]) Array.newInstance(this.getClass(), maxSubNode);
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
public TreeNode<T>[] getSubNode() {
return subNode;
}
public void setSubNode(TreeNode<T>[] subNode) {
this.subNode = subNode;
}
@Override
public String toString() {
return "Node [key=" + key + ", value=" + value + ", subNode=" + Arrays.toString(subNode) + "]";
}
}
public class TreeUtils<T> {
public static <T> Result delNode(TreeNode<T> tree, String delkey) {
Result result = new Result();
if (EmptyUtil.isEmpty(tree) || EmptyUtil.isEmpty(delkey)) {
return result.setFailMsg("空树或空key");
}
if(tree.getKey().equals(delkey)){
return result.setReturnObject(null);
}
TreeNode<T>[] subNode = tree.getSubNode();
if(EmptyUtil.isEmpty(subNode)){
return result.setFailMsg("未找到符合的delkey");
}
subNode = delNodeByDelkey$Recursive(subNode,delkey);
tree.setSubNode(subNode);
result.setResultObject(tree);
return result;
}
private static <T> TreeNode<T>[] delNodeByDelkey$Recursive(TreeNode<T>[] subTree,String delkey) {
TreeNode<T> node ;
for(int i =0,len = subTree.length; i < len; i++){
node = (TreeNode<T>) subTree[i];
if(EmptyUtil.isEmpty(node)){
continue;
}
if(delkey.equals(node.getKey())){
subTree[i] = null;
continue;
}
TreeNode<T>[] tempSubs = node.getSubNode();
if(EmptyUtil.isNotEmpty(tempSubs)){
tempSubs = delNodeByDelkey$Recursive(tempSubs,delkey);
}
node.setSubNode(tempSubs);
}
return subTree;
}
public static <T> Result addNode(String addKey,TreeNode<T> tree,TreeNode<T> node){
Result reuslt = new Result();
if(EmptyUtil.isEmpty(addKey) || EmptyUtil.isEmpty(tree) || EmptyUtil.isEmpty(node)){
return reuslt.setFailMsg("空key或空树或空节点");
}
TreeNode<T>[] subTree = tree.getSubNode();
subTree = addNodeToTreeByKey(addKey,tree.getKey(),node,subTree);
tree.setSubNode(subTree);
reuslt.setResultObject(tree);
return reuslt;
}
private static <T> TreeNode<T>[] addNodeToTreeByKey(String addkey, String parentkey,TreeNode<T> node, TreeNode<T>[] subTree) {
TreeNode<T> tempNode;
for(int i = 0,len = subTree.length; i < len; i++){
tempNode = subTree[i];
if(!addkey.equals(parentkey)){
if(EmptyUtil.isNotEmpty(tempNode)){
TreeNode<T>[] tempSubs = tempNode.getSubNode();
tempSubs = addNodeToTreeByKey(addkey,tempNode.getKey(),node,tempSubs);
}
continue;
}
if(EmptyUtil.isEmpty(tempNode)){
subTree[i] = node;
}
}
return subTree;
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
TreeNode<String> tree = new TreeNode<String>("root数据", "root", 1);
TreeNode<String> first1 = new TreeNode<String>("first1", "first1", 1);
TreeNode<String>[] aaa = (TreeNode<String>[]) Array.newInstance(TreeNode.class, 4);
aaa[0] = first1;
aaa[1] = first1;
tree.setSubNode(aaa);
System.err.println("----原树:" + tree);
TreeNode<String> first2 = new TreeNode<String>("first2", "first2", 1);
Result result = TreeUtils.addNode("first1",tree,first2);
tree = (TreeNode<String>) result.getResultObject();
System.err.println("加入节点:" + tree);
Result result2 = TreeUtils.delNode(tree, "first2");
tree = (TreeNode<String>) result2.getResultObject();
System.err.println("删除节点:" + tree);
Object obj = finfNumber(2);
System.err.println(obj);
}