【发布时间】:2018-01-19 13:10:05
【问题描述】:
我正在尝试在 C# 中实现二叉树,而不是二叉搜索树。我实现了下面的代码,它工作正常,但不是我想要的。基本上我正在尝试实现一个完整的二叉树,但是使用下面的代码,我得到了一个不平衡的二叉树。
Input : 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
Desired Output :
10
/ \
20 30
/ \ / \
40 50 60 70
/ \ /
80 90 100
Current Output :
10
/ \
20 30
/ \
40 50
/ \
60 70
/ \
80 90
/
100
这是我的代码:
class Node
{
public int data;
public Node left;
public Node right;
public Node()
{
data = 0;
left = null;
right = null;
}
}
class Tree
{
private Node root;
public Tree()
{
root = null;
}
public void AddNode(int data)
{
root = AddNode(root, data);
}
public Node AddNode(Node node, int data)
{
if (node == null)
{
node = new Node();
node.data = data;
}
else
{
if (node.left == null)
{
node.left = AddNode(node.left, data);
}
else
{
node.right = AddNode(node.right, data);
}
}
return node;
}
}
class Program
{
static void Main(string[] args)
{
int[] nodeData = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
Tree tree1 = new Tree();
foreach (int i in nodeData)
{
tree1.AddNode(i);
}
Console.ReadKey();
}
}
我知道问题出在我的 AddNode(Node node, int data) {...} 函数的 else 块中,但我无法找出解决方案。
我试图在网上寻找解决方案,但大多数地方都是它的二叉搜索树实现。我喜欢的解决方案之一是here,但解决方案是将输入数组作为递归调用的参数传递,我不知道在非常大的树的情况下这是否有效。还有其他几个帖子,但没有一个可以解决我的问题。
虽然我在 C# 中实现它,但更具体地说,我正在寻找修复我的 AddNode(...) 函数的逻辑,所以如果不是代码实现,我对算法很好。
有什么帮助吗?
【问题讨论】:
-
是否需要使用节点?可以用数组代替吗?
-
您希望树对输入数据进行排序还是直接添加?
标签: c# algorithm tree binary-tree