Tag: 二叉树

遍历任意大的二叉树

我一直在寻找解决方案。 C#,.NET 4.0,VS2010 我可以很容易地写一个递归的,但是如果树是任意大的话,我不能为我的生活弄清楚不会溢出堆栈的东西。 这是一个二叉树问题,我正在尝试写一个 public IEnumerable Values() 方法。 以下是您感兴趣的完整代码: http : //pastebin.com/xr2f3y7g 显然,目前在那里的版本不起作用。 我可能应该提一下,我是C#的新手,从C ++过渡。

Bin Tree Post Order Traversal,No recursion,no node flag

还有另一种方法吗? 花了2个小时试图搞清楚。 我有一个解决方案(参见下面的DumpPostOrder)但是,有更好或更有效的方法吗? 感觉可能有。 规则是 – 没有递归,节点不能有访问标志。 即,你只能使用左+右成员。 我的方法是在这个过程中破坏树。 通过将每一边的子节点设置为null,您可以将节点标记为遍历一次,但我也会查看每个节点有两次子节点:(。有更好的更快方式吗?(对我的预订和顺序实现的评论表示赞赏)但没有必要(即投票,但没有标记答案)。谢谢! using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BinaryTreeNoRecursion { public class TreeNode { public T Value { get; set; } public TreeNode Left { get; set; } public TreeNode Right { get; set; } public TreeNode(T inValue) { Value = inValue; } public […]

如何使用WPF绘制二叉树视图?

我想像这样画出它: 我可以在控制台上绘制二叉树。 我想用WPF绘制它。 这是我为控制台编写的代码。 class Program { static void Main(string[] args) { List myBinaryData = new List(); myBinaryData.Add(new BinaryTreeData{ownID=1}); myBinaryData.Add(new BinaryTreeData { parentID=1, ownID = 2 }); myBinaryData.Add(new BinaryTreeData { parentID=1,ownID = 3 }); foreach (var item in myBinaryData) { Console.WriteLine(“{0}——{1}”, item.parentID, item.ownID); } } } class BinaryTreeData : INotifyPropertyChanged { private int _ownID; private […]

C#在Console中显示二进制搜索树

我有简单的二叉搜索树 public class BNode { public int item; public BNode right; public BNode left; public BNode(int item) { this.item = item; } } public class BTree { private BNode _root; private int _count; private IComparer _comparer = Comparer.Default; public BTree() { _root = null; _count = 0; } public bool Add(int Item) { if (_root […]

如何迭代地在二进制搜索树中添加元素?

public void Insert(int value) { if (value Data) { if (RightNode == null) { RightNode = new TreeNode(value); } else { RightNode.Insert(value); } } } 我写了一个方法来递归地在BST中添加元素,它检查要添加小于或大于的值并将其添加到适当的位置,但我想知道迭代方法是如何工作的? 我需要为我的BST迭代添加方法。

在C#中迭代树的微优化

我正在做一个大规模的运算项目。 我从一开始就一直在优化所有内容,因为我知道它很重要。 进行性能分析我的代码在一个函数中花费了近40%的生命 – 二叉树迭代器。 public ScTreeNode GetNodeForState(int rootIndex, float[] inputs) { 0.2% ScTreeNode node = RootNodes[rootIndex].TreeNode; 24.6% while (node.BranchData != null) { 0.2% BranchNodeData b = node.BranchData; 0.5% node = b.Child2; 12.8% if (inputs[b.SplitInputIndex] <= b.SplitValue) 0.8% node = b.Child1; } 0.4% return node; } 任何C#优化专家都有进一步优化的提示吗? 所有的比较都是花车。 我知道理论上它应该没关系,但我使用的是字段而不是属性,所以要确保优化。 在这里节省一点钱可以减少过程。 请不要回答说“这些优化在现实世界中并不重要” – 因为在这种情况下他们会这样做。 🙂 编辑:我已经将代码更新为我现在遵循以下注释的内容,并在每行代码的性能分析输出中添加。 […]

网格的最优高密度二元空间划分

我正在编写一个游戏,其中一个角色在一个随机生成的地图上实时移动(因为它被揭示。)这引出了一个有趣的数据结构问题。 地图在进入视图时生成,围绕角色的圆圈(可能是20-60个图块),因此在有数据的地方,它非常密集,并且全部在网格中。 但是,如果没有数据,可能会有巨大的,未经生成的空间。 例如,角色可以走在一个巨大的圆圈中,在巨大的空白空间周围创造一圈瓷砖。 简单的矩阵会产生大量不必要的开销,并浪费大量空间。 但是,典型的BSP似乎会因为数据的密集网格特性而导致性能下降。 你有什么建议? 矩阵 – 四叉树 – 两者的混合?

如何创建二叉树

我不是指二进制搜索树。 例如,如果我将值1,2,3,4,5插入到二叉搜索树中,则inorder遍历将给出1,2,3,4,5作为输出。 但是如果我将相同的值插入到二叉树中,则inorder遍历应该给出4,2,5,1,3作为输出。 可以使用动态数组创建二叉树,其中对于索引n中的每个元素,2n + 1和2n + 2分别表示其左和右子节点。 因此,表示和级别顺序遍历在这里非常容易。 但我认为,有序,下订单,预购很难。 我的问题是我们如何创建二叉树像二叉搜索树。 即。 有一个包含数据的树类,左右指针而不是数组。 这样我们就可以递归地进行遍历。