简体   繁体   English

虽然我正在为我的二叉树执行中序遍历,但为什么它首先显示我的右子树?

[英]Though i'm performing Inorder Traversal for my Binary Tree, why it's displaying my Right sub Tree first?

I was performing in_order traversal for my binary tree,Instead of displaying my left sub tree first,it's displaying my right sub tree.我正在为我的二叉树执行 in_order 遍历,而不是首先显示我的左子树,而是显示我的右子树。 Please find my bug.请找到我的错误。

//Inserting //插入

public void Insert(int data)
{
    Node temp=new Node(data);
    
    if(root==null) root=temp;
    else
    {
        Node traverse=root;
        Node parent=root;
        
        while( traverse!=null )
        {
            parent=traverse;
            if(traverse.Data > temp.Data) traverse=traverse.Right;
            else traverse=traverse.Left;
        }
        
        if( parent.Data > temp.Data ) parent.Right=temp;
        else parent.Left=temp;
        
    }
}

//Inorder Traversal //中序遍历

public void display(Node traverse)
{
    if(traverse != null)
    {
        display(traverse.Left);
        System.out.print(traverse.Data+"->");
        display(traverse.Right);
    }
}

My_output我的输出

Output should be: 12->15->18->20->22->25->30输出应该是:12->15->18->20->22->25->30

Main Function主功能

Node Creation节点创建

In insert there is an issue in this code:insert中,此代码存在问题:

            if(traverse.Data > temp.Data) traverse=traverse.Right;
            else traverse=traverse.Left;

As temp holds the data you want to insert, you are here storing lesser values in the right subtree of a node ( traverse ).由于temp保存了您要插入的数据,因此您在这里将较小的值存储在节点的子树( traverse )中。 It should be the opposite.应该是相反的。

The same mistake occurs after the loop, in this code:同样的错误发生在循环之后,在这段代码中:

    if( parent.Data > temp.Data ) parent.Right=temp;
    else parent.Left=temp;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM