C# 级序遍历#

C# 级序遍历#,c#,C#,我正在尝试实现BT的级别顺序遍历 class Node { public int data; public Node left; public Node right; public Node(int data) { this.data = data; right = null; left = null; } } unsafe class BinaryTree { Node root;

我正在尝试实现BT的级别顺序遍历

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

unsafe class BinaryTree
{
    Node root;       
    public BinaryTree()
    {
        root = null;
    }

    public void display(Node level)
    {
        Node current = level;
        if (current.left != null)
        {
            display(current.left);              
        }
        Console.WriteLine(current.data);
        if(current.right!=null)
        {
            display(current.right);                
        }
    }

    Queue<int> qu = new Queue<int>();

    public void LevelOrderTraversal()
    {

    }

    public void insert(int num)
    {
        Node newnode = new Node(num);
        Node currentNode;
        if(root==null)
        {
            root = newnode;
        }
        else 
        {
            currentNode=root;
            while(true)
            {
                Node tmpParent = currentNode;
                if(newnode.data<=currentNode.data)
                {
                    currentNode = currentNode.left;
                    if (currentNode == null)
                    { tmpParent.left = newnode; return; }
                }
                else if(newnode.data>currentNode.data)
                {
                    currentNode = currentNode.right;
                    if (currentNode == null)
                    { tmpParent.right = newnode; return; }
                }
            }
        }
    }

    static void Main(string[] args)
    {
        BinaryTree bTree = new BinaryTree();
        bTree.root = new Node(50);
        bTree.root.left = new Node(25);
        bTree.root.right = new Node(75);
        bTree.insert(22);
        bTree.insert(78);

        bTree.LevelOrderTraversal(&bTree.root); //Problem occurs here                    
        Console.WriteLine(bTree.root);
        Console.ReadLine();
    }

}
类节点
{
公共int数据;
公共节点左;
公共节点权;
公共节点(int数据)
{
这个数据=数据;
右=空;
左=空;
}
}
不安全类二叉树
{
节根;
公共二叉树()
{
root=null;
}
公共无效显示(节点级)
{
节点电流=电平;
if(current.left!=null)
{
显示(当前。左侧);
}
Console.WriteLine(当前数据);
if(当前.右!=null)
{
显示(当前。右侧);
}
}
Queue qu=新队列();
公共void LevelOrderTraversal()
{
}
公共空白插入(整数)
{
Node newnode=新节点(num);
节点当前节点;
if(root==null)
{
根=新节点;
}
其他的
{
currentNode=root;
while(true)
{
节点tmpParent=currentNode;
if(newnode.datacurrentNode.data)
{
currentNode=currentNode.right;
if(currentNode==null)
{tmpParent.right=newnode;return;}
}
}
}
}
静态void Main(字符串[]参数)
{
BinaryTree bTree=新的BinaryTree();
bTree.root=新节点(50);
bTree.root.left=新节点(25);
bTree.root.right=新节点(75);
b.插入(22);
b.插入(78);
bTree.LevelOrderTraversal(&bTree.root);//此处出现问题
Console.WriteLine(bTree.root);
Console.ReadLine();
}
}

我试图传递根节点的地址,以便将其添加到队列中,但不确定如何传递根节点的地址并在函数中捕获它。它表示地址不能采用托管类型的地址。任何帮助都将不胜感激。谢谢你

谢谢你的帮助。我明白了。这是答案

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

class BinaryTree
{
    Node root;       
    public BinaryTree()
    {
        root = null;
    }

    public void display(Node level)
    {
        Node current = level;
        if (current.left != null)
        {
            display(current.left);              
        }
        Console.WriteLine(current.data);
        if(current.right!=null)
        {
            display(current.right);                
        }
    }

    Queue<Node> qu = new Queue<Node>();

    public void LevelOrderTraversal()
    {
        while (true)
        {
            if (qu.Count == 0)
            { return; }
            else
            {
                Node current = qu.Dequeue();
                Console.WriteLine(current.data);
                if (current.left != null)
                    qu.Enqueue(current.left);
                if (current.right != null)
                    qu.Enqueue(current.right);
            }
        }
    }

    public void insert(int num)
    {
        Node newnode = new Node(num);
        Node currentNode;
        if(root==null)
        {
            root = newnode;
        }
        else 
        {
            currentNode=root;
            while(true)
            {
                Node tmpParent = currentNode;
                if(newnode.data<=currentNode.data)
                {
                    currentNode = currentNode.left;
                    if (currentNode == null)
                    { tmpParent.left = newnode; return; }
                }
                else if(newnode.data>currentNode.data)
                {
                    currentNode = currentNode.right;
                    if (currentNode == null)
                    { tmpParent.right = newnode; return; }
                }
            }
        }
    }

    static void Main(string[] args)
    {
        BinaryTree bTree = new BinaryTree();
        bTree.root = new Node(50);
        bTree.root.left = new Node(25);
        bTree.root.right = new Node(75);
        bTree.insert(22);
        bTree.insert(78);
        bTree.qu.Enqueue(bTree.root);
        bTree.LevelOrderTraversal();
        Console.ReadLine();
    }

}
类节点
{
公共int数据;
公共节点左;
公共节点权;
公共节点(int数据)
{
这个数据=数据;
右=空;
左=空;
}
}
类二叉树
{
节根;
公共二叉树()
{
root=null;
}
公共无效显示(节点级)
{
节点电流=电平;
if(current.left!=null)
{
显示(当前。左侧);
}
Console.WriteLine(当前数据);
if(当前.右!=null)
{
显示(当前。右侧);
}
}
Queue qu=新队列();
公共void LevelOrderTraversal()
{
while(true)
{
如果(qu.Count==0)
{return;}
其他的
{
节点当前=qu.Dequeue();
Console.WriteLine(当前数据);
if(current.left!=null)
qu.Enqueue(当前左);
if(current.right!=null)
qu.Enqueue(当前。右侧);
}
}
}
公共空白插入(整数)
{
Node newnode=新节点(num);
节点当前节点;
if(root==null)
{
根=新节点;
}
其他的
{
currentNode=root;
while(true)
{
节点tmpParent=currentNode;
if(newnode.datacurrentNode.data)
{
currentNode=currentNode.right;
if(currentNode==null)
{tmpParent.right=newnode;return;}
}
}
}
}
静态void Main(字符串[]参数)
{
BinaryTree bTree=新的BinaryTree();
bTree.root=新节点(50);
bTree.root.left=新节点(25);
bTree.root.right=新节点(75);
b.插入(22);
b.插入(78);
bTree.qu.Enqueue(bTree.root);
bTree.LevelOrderTraversal();
Console.ReadLine();
}
}

为什么要首先尝试使用指针?为什么不把这些都管理好呢?
不安全
和不安全引用(
&
)在这里完全不需要。。。