C# 级序遍历#
我正在尝试实现BT的级别顺序遍历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;
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();
}
}
为什么要首先尝试使用指针?为什么不把这些都管理好呢?不安全
和不安全引用(&
)在这里完全不需要。。。