【问题标题】:What is wrong in the inorder traversal in this code?这段代码中序遍历有什么问题?
【发布时间】:2019-09-27 06:39:08
【问题描述】:

Else 条件也与 - inOrder(Node node) 方法中的 if 条件一起运行

我实际上使用给定的代码在 BST 中添加节点,现在我尝试使用中序遍历检索它们,但输出不是有序的,因为 Else 条件在每个 If 之后执行。

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 *

【问题讨论】:

    标签: java recursion binary-search-tree


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2018-09-09
      相关资源
      最近更新 更多