33,008
社区成员
发帖
与我相关
我的任务
分享
用list维护这颗树;
parentNode = root节点;
beginFlag = false;
从头到尾遍历:
该节点的parent==parentNode?
如果相等,则让beginFlag = true;
如果不等,且beginFlag == true,则表名该节点的前一个节点是最右边的节点。打印该节点,然后parentNode = 该节点。beginFlag = false;
public class Tree<T> {
private final List<Node> tree = new ArrayList<>();
private class Node {
private Node parent;
private T value;
private Node(Node parent, T value) {
this.parent = parent;
this.value = value;
}
public Node getParent() {
return parent;
}
public T getValue() {
return value;
}
}
public void addNode(int parentIndex, T value) {
//传入-1代表添加根节点
if (parentIndex == -1) {
tree.add(new Node(null, value));
} else {
tree.add(new Node(tree.get(parentIndex), value));
}
}
public int getParentIndex(int index) {
return tree.indexOf(tree.get(index).parent);
}
public int size() {
return tree.size();
}
public T getNodeValue(int index) {
return tree.get(index).value;
}
public static void main(String[] args) {
Tree<Integer> treeTest = new Tree<>();
//root
treeTest.addNode(-1, 0);
//第二层
treeTest.addNode(0, 1);
treeTest.addNode(0, 2);
treeTest.addNode(0, 3);
//第三层
treeTest.addNode(1, 4);
treeTest.addNode(2, 5);
treeTest.addNode(2, 6);
treeTest.addNode(3, 7);
treeTest.addNode(3, 8);
treeTest.addNode(3, 9);
//第四层
treeTest.addNode(6, 10);
int parentIndex = -1;
boolean beginFlag = false;
for (int i = 0; i < treeTest.size(); i++) {
if (treeTest.getParentIndex(i) == parentIndex) {
beginFlag = true;
} else {
if (beginFlag) {
System.out.println(treeTest.getNodeValue(i - 1));
parentIndex = i - 1;
beginFlag = false;
}
}
//如果是最后一个节点,则直接打印
if (i == treeTest.size() - 1) {
System.out.println(treeTest.getNodeValue(i));
break;
}
}
}
}