ObjectsRepresentingTreesC#(或.net)中有表示二叉树(或好奇)和n叉树的对象吗?我不是在谈论表示树控件,而是作为模型对象。如果没有,有什么好的外部实现吗?NGenerics项目是数据结构和算法的重要集合,包括二叉树。publicclassBinaryTree:IVisitableCollection,ITree{//方法publicvoidAdd(BinaryTreesubtree);publicvirtualvoidbreadthFirstTraversal(IVisitor访问者);publicvirtualvoidDepthFirstTraversal(OrderedVisitororderedVisitor);publicBinaryTreeGetChild(intindex);publicboolRemove(BinaryTreechild);公共虚拟无效RemoveLeft();publicvirtualvoidRemoveRight();//...//属性publicvirtualTData{get;放;}publicintDegree{得到;}publicvirtualintHeight{得到;}publicvirtualboolIsLeafNode{get;}publicBinaryTreethis[inti]{get;}publicvirtualBinaryTreeLeft{get;放;}publicvirtualBinaryTreeRight{get;有一个,但它是一个实现。我尝试了一个简单的(不平衡的)二叉搜索树。以上就是C#学习教程:代表树的对象分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——publicsealedclassBinarySearchTree:IEnumerable{privatereadonlyIComparer_comparer;公共BinaryTreeNode根{得到;私有集;}publicBinarySearchTree(){}publicBinarySearchTree(IEnumerablecollection):this(collection,Comparer.Default){}publicBinarySearchTree(IEnumerablecollection,IComparercomparer){if(collection==null)thrownewArgumentNullException("collection");如果(比较器==null)抛出新的ArgumentNullException(“比较器”);_comparer=比较器;foreach(集合中的var项目)添加(项目);}publicBinarySearchTree(BinaryTreeNoderoot){Root=root;}publicvoidAdd(Tval){varnewNode=newBinaryTreeNode(val);if(Root==null){Root=newNode;返回;添加(根,新节点);}voidAdd(BinaryTreeNoderoot,BinaryTreeNodenode){if(_comparer.Compare(node.Value,root.Value)root.Value{if(root.Right==null)root.Right=node;elseAdd(root.Right,节点);}}publicboolContains(Tval){returnContains(Root,val);}boolContains(BinaryTreeNodenode,Tval){if(node==null)returnfalse;varcomparison=_comparer.Compare(val,node.Value);if(comparison==0)//val=node.valuereturntrue;elseif(比较node.ValuereturnContains(node.Right,val);}publicTGetMinimum(){if(Root==null)returndefault(T);varnode=Root;while(node.Left!=null)node=node.Left;returnnode.Value;}publicTGetMaximum(){if(Root==null)returndefault(T);varnode=Root;while(node.Right!=null)node=node.正确;返回node.Value;}publicIEnumeratorGetEnumerator(){returnnewBinaryTreeEnumerator(Root);}IEnumeratorIEnumerable.GetEnumerator(){returnGetEnumerator();}}publicsealedclassBinaryTreeNode{publicBinaryTreeNodeLeft{get;set;}publicBinaryTreeNodeRight{get;set;}publicTValue{get;privateset;}publicBinaryTreeNode(Tval){值=值;}}publicsealedclassBinaryTreeEnumerator:IEnumerator{privateStack>_stack=newStack>();公共T当前{得到;私有集;}publicBinaryTreeEnumerator(BinaryTreeNoderoot){if(root==null)return;//空根=Enumerable.Empty()PushLeftBranch(root);}publicvoidDispose(){_stack=null;//帮助GC}publicboolMoveNext(){if(_stack.Count==0)returnfalse;varnode=_stack.Pop();Current=node.Value;如果(node.Right!=null)PushLeftBranch(node.Right);返回真;}privatevoidPushLeftBranch(BinaryTreeNodenode){while(node!=null){_stack.Push(node);节点=节点。左;}}publicvoidReset(){_stack.Clear();}objectIEnumerator.Current{get{returnCurrent;}}}本文收集自网络,不代表诸如此类的立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
