多向链表 LinkedNodeType节点不重复地递归读取
已知,某数据结构具有如下特征:
(1)可能拥有向右的节点(记为 right )和向下的节点(记为 button );
(2)每个节点,都拥有一个数值属性(记为 value )。
要求:
1. 随机传入其中一个节点,打印其后的所有节点的值(value),可不考虑顺序。
2. 请设计适当的数据结构,并提供方法,实现如上要求。
一、简画数据示例
二、设计数据结构
@Data
@NoArgsConstructor // 无参构造
@AllArgsConstructor // 全参构造
@RequiredArgsConstructor// 所有标有@NonNull属性,作为参数的构造
class LinkedNode{
@NonNull
int value;
LinkedNode right; // 指向右节点的指针
LinkedNode button; // 指向下节点的指针
}
三、根据简画数据示例,构建数据
// 子树5
LinkedNode linkedNode13 = new LinkedNode(13); // 树叶
LinkedNode linkedNode89 = new LinkedNode(89); // 树叶
LinkedNode linkedNode21 = new LinkedNode(21,linkedNode13,linkedNode89);
LinkedNode linkedNode8 = new LinkedNode(8); // 树叶
LinkedNode linkedNode5 = new LinkedNode(5,linkedNode21,linkedNode8);
// 子树11
LinkedNode linkedNode4 = new LinkedNode(4); // 树叶
LinkedNode linkedNode19 = new LinkedNode(19); // 树叶
LinkedNode linkedNode12 = new LinkedNode(12, linkedNode4, linkedNode19);
LinkedNode linkedNode7 = new LinkedNode(7, linkedNode12, null);
LinkedNode linkedNode11 = new LinkedNode(11, linkedNode7, linkedNode5);
// 树根9
LinkedNode linkedNode9 = new LinkedNode(9, linkedNode11, null);
四、实现节点数值的打印
public void printNode(LinkedNode linkedNode){
this.printRightNode(linkedNode);
this.printButtonNode(linkedNode);
System.out.println(linkedNode.getValue());
}
private void printRightNode(LinkedNode right){
if(right.getRight() != null){
this.printNode(right.getRight());
}
}
private void printButtonNode(LinkedNode button) {
if(button.getButton() != null){
this.printNode(button.getButton());
}
}
五、测试
public static void main(String[] args) {
PaymanagementTest pm = new PaymanagementTest();
pm.printNode(pm.linkedNode5);
System.out.println("执行结束=================");
}