此代码中的顺序遍历有什么问题?

时间:2019-05-09 12:14:05

标签: java recursion binary-search-tree

其他条件也与-inOrder(节点节点)方法中的if条件一起运行

我实际上使用给定的代码在BST中添加了节点,现在我试图使用有序遍历来检索它们,但是由于Else条件在每个If之后执行,因此输出不是按有序方式进行的。 / p>

import java.util.*;
import java.io.*;
import java.lang.*;

class Node{
    int data; Node left; Node right;
    public Node(int data) {
        this.data = data;
        left = null;
        right = null;

    }
}
public class insert_tree {
    Node root;  
    public void addNode(int value) { 
        root = add(root, value);
    }
    private Node add(Node node, int value) {
        if(node == null) {
            node  = new Node(value);
            return node;
        }
         if(value == node.data) {
            node.left = add(node.left, value);
        }
        else if(value < node.data) {
            node.left = add(node.left, value);
        }       
        else {
            node.right = add(node.right, value);
        }

        return node;
    }

    private void inOrder(Node node) {
        if(node != null) {
            inOrder(node.left);
            System.out.print(node.data + " ");
            inOrder(node.right);
        }
        else {
            System.out.print("*" + " ");
        }
    }
    public void inorder() {
        inOrder(root);
    }
   public static void main(String args[]) {
        insert_tree obj = new insert_tree();
        obj.addNode(20);
        obj.addNode(14);
        obj.addNode(25);
        obj.addNode(10);
        obj.addNode(16);
        obj.addNode(25);
        obj.addNode(21);
        obj.addNode(30);
        //printing the tree
        obj.inorder();



    }
}


  

预期输出应为:-10 14 16 20 21 25 25 30

     

我得到的输出是:-* 10 * 14 * 16 * 20 * 21 * 25 * 25 * 30 *

1 个答案:

答案 0 :(得分:0)

private void inOrder(Node node) {
    if (node != null) {
        if(node.left != null)
            inOrder(node.left);
        System.out.print(node.data + " ");
        if(node.right != null)
            inOrder(node.right);
    } else {
        System.out.print("*" + " ");
    }
}

我刚刚添加了条件以在订购节点之前检查节点的邻居是否不是null

if(node.left != null)
if(node.right != null)

输出:

  

10 14 16 20 21 25 25 30