【问题标题】:print all the nodes which are multiples of root node using java使用java打印所有是根节点倍数的节点
【发布时间】:2021-01-14 20:27:13
【问题描述】:

假设这是二叉树的情况。 (见下图。)我需要打印按顺序遍历的所有节点,它必须只打印多个根节点。

对于上面的二叉树,我想要的输出是 20 10 25 5 15 30

这是我的代码

class Node {
    int data;
    Node left, right;

    Node(int value) {
        data = value;
        left = right = null;
    }
}

class Tree {
    Node root;

    Tree() {
        root = null;
    }

    // Method to construct a binary tree from the given array (Do not edit the code given below)
    public Node insertNode(int[] elementsArr, Node node, int i) {
        if (i < elementsArr.length) {
            node = new Node(elementsArr[i]);
            node.left = insertNode(elementsArr, node.left, 2 * i + 1);
            node.right = insertNode(elementsArr, node.right, 2 * i + 2);
        }
        return node;
    }

    // Method to print nodes that are multiple of root node
    //NOte -  i have updated the printNode method but still not getting desired output
    public void printNodes(Node node) {
        // Write your code here
        if (node == null)
            return;
        if(node.data% root.data==0) {
            printNodes(node.left);
            System.out.print(node.data+ " ");
            printNodes(node.right);
        }
    }
}

/*Don't change main class also*/
public class PrintSpecificNodes {
    public static void main(String[] x) {
        Tree tree = new Tree();

        Scanner sc = new Scanner(System.in);

        int size;
        size = sc.nextInt();

        if (size <= 0) {
            System.out.println("Size should be a positive integer");
        } else {
            int[] elementsArr = new int[size];
            for (int i = 0; i < size; i++) {
                elementsArr[i] = sc.nextInt();
            }
            tree.root = tree.insertNode(elementsArr, tree.root, 0);
            tree.printNodes(tree.root);
        }
    }
}

我必须对方法 printNodes() 进行哪些更改才能获得所需的输出?

【问题讨论】:

  • 这段代码你得到了什么结果?
  • 只有正确的五次,但我不知道如何过滤输出,使其只能显示根节点的倍数。只需检查 printNode(Node node) { } 方法要改变什么
  • 方法好像还可以,你说的“只真五次”是什么意思
  • 您尝试将node.data % node.data 更改为node.data % root.data 吗?

标签: java data-structures binary-tree binary-search-tree


【解决方案1】:
System.out.print(node.data % node.data + " ");

将得到 0

方法printNodes应该知道root的值

    public void printNodes(Node node) {
        if (node == null) return;
        printNodes(node.left);
        if(node.data % root.data == 0){
            System.out.println(node.data);
        }
        printNodes(node.right);
    }

【讨论】:

  • 由于方法printNodes() 在类Tree 中,它不能访问该类的root 成员吗?如果是,那为什么它需要成为方法的参数?
  • 对。没注意到类树。假设只有节点类。
【解决方案2】:
public void printNodes(Node node){
    // Write your code here
    if(node == null)
    return ;
        if(node.data==0){
        System.out.println("Division by zero is not defined");
        return;
        }
    printNodes(node.left);
    if(node.data%root.data==0)
    {
        System.out.print(node.data+ " ");
    }
    printNodes(node.right);

}

我认为这应该可以解决您的问题,因为它是一个中序横向,它应该是左-根-右,它还应该检查某个数字是否为 0。如果为 0,则不会打印任何内容(未定义除以 0)。

【讨论】:

    【解决方案3】:

    public void printNodes(节点节点){

        if (node == null)
            return;
        if(node.data==0){
            System.out.println("Division by zero is undefined");
            return;
        }
        printNodes(node.left);
    
        if(node.data % root.data == 0){
            System.out.print(node.data + " ");
        }
        printNodes(node.right);
    }
    

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多