尽管我为我的二进制树执行有序遍历,但为什么先显示我的右子树?

发布于 2025-01-27 15:36:17 字数 1210 浏览 2 评论 0原文

我正在为我的二进制树执行IN_Order遍历,而不是首先显示我的左下树,而是显示我的右子树。 请找到我的错误。

//插入

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

应该输出输出:12-> 15-> 18-> 20-> 22-> 25-> 30

主函数

node creation

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.
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

Main Function

Node Creation

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

镜花水月 2025-02-03 15:36:17

insert中,此代码中存在一个问题:

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

temp保存要插入的数据,您在这里存储 LISTER 值 em> right subtree(traverse)。应该相反。

在循环之后,在此代码中发生同样的错误:

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

In insert there is an issue in this code:

            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). 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文