带分叉链表,各节点的递归读取

这篇博客详细介绍了如何设计一个多向链表的数据结构,包括节点的右向和下向连接,并实现了从任意节点开始不重复地递归读取所有节点值的方法。通过实例、构造数据和测试,展示了该数据结构的正确性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多向链表 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("执行结束=================");
    }

六、测试结果:

运用于项目:便捷简洁的企业官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值