一道递归笔试题

简介: 一道递归笔试题

这种形式展现出来

思路:定义数据结构NodeTree将NodeTree放进List,然后遍历每个NodeTree,并将每个NodeTree的深度算出来,有多少深度前面就有多少-,然后打印。递归思想:NodeTree的parentId等于0的时候为最低深度直接返回,用for循环查找当前id的parentId在哪里找到打印一个“-”,然后循环递归。

import java.util.*;
public class TestRecursion {
    static List<NodeTree> nodeList = new ArrayList<>();
    public static void main(String[] args) {
        nodeList.add(new NodeTree(1, 0, "aa"));
        nodeList.add(new NodeTree(2, 1, "bb"));
        nodeList.add(new NodeTree(3, 1, "cc"));
        nodeList.add(new NodeTree(4, 3, "dd"));
        nodeList.add(new NodeTree(5, 4, "ee"));
        nodeList.add(new NodeTree(6, 5, "ff"));
        nodeList.add(new NodeTree(7, 0, "gg"));
        nodeList.add(new NodeTree(8, 7, "hh"));
        nodeList.add(new NodeTree(9, 7, "ii"));
        for (NodeTree nodeTree : nodeList) {
            print(nodeTree.getParentId(),nodeTree.getName());
            System.out.println("");
        }
    }
    static int x = 0;
    public static void print(int id, String name) {
        if (id == 0) {
            System.out.print("-" + name);
            return;
        }
        for (int i = 0; i < nodeList.size(); i++) {
            if (nodeList.get(i).getId() == id) {
                System.out.print("-");
                print(nodeList.get(i).getParentId(),name);
            }
        }
    }
}
class NodeTree {
    private int id;
    private int parentId;
    private String name;
    public NodeTree() {
    }
    public NodeTree(int id, int parentId, String name) {
        this.id = id;
        this.parentId = parentId;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getParentId() {
        return parentId;
    }
    public void setParentId(int parentId) {
        this.parentId = parentId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

相关文章
|
6天前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
6天前
|
算法 C语言
C语言汉诺塔数列(循环版,递归版)
C语言汉诺塔数列(循环版,递归版)
40 0
|
7月前
|
存储
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
浅谈递归函数(最后一个例题:浅谈汉诺塔思路与代码)
|
11月前
|
C语言
C语言解决青蛙跳台阶问题(递归与非递归)
一只青蛙可以一次跳1级台阶或一次跳2级台阶,例如:跳上第一级台阶只有一种跳法:直接跳1级即可。跳上两级台阶,有两种跳法:每次跳1级,跳两次;或者一次跳2级.问要跳上第级台阶有多少种跳法?
112 0
|
11月前
|
C语言
汉诺塔问题C语言递归(详细)
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?(每次只能移动1个盘子,大盘子只能放在小盘子下面)
114 0
|
C语言
【C语言】递归详解汉诺塔问题
【C语言】递归详解汉诺塔问题
174 0
【C语言】递归详解汉诺塔问题
|
C语言
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
124 0
C语言题解:经典递归题目(斐波那契数列、汉罗塔问题以及青蛙跳台阶问题)
看代码求结果练习题(递归例题)
看代码求结果练习题(递归例题)
70 0
看代码求结果练习题(递归例题)
递归小结(基础题目斐波那契,汉诺塔等)(上)
递归小结(基础题目斐波那契,汉诺塔等)