当前位置: 首页 > 编程语言 > C#

如何创建二叉树分享

时间:2023-04-11 10:31:53 C#

如何创建二叉树我不是说二叉搜索树。例如,如果我将值1,2,3,4,5插入到二叉搜索树中,则中序遍历将给出1,2,3,4,5作为输出。但是如果我将相同的值插入到二叉树中,中序遍历应该给出4,2,5,1,3作为输出。可以使用动态数组创建二叉树,其中对于索引n处的每个元素,2n+1和2n+2分别表示其左子节点和右子节点。所以表示和层序遍历在这里非常容易。但我认为订购、下订单、预购很难。我的问题是我们如何创建二叉搜索树之类的二叉树。现在。有一个包含数据、左右指针而不是数组的树类。这样我们就可以递归遍历了。如果我没理解错的话,你想从一个数组int[]values=newint[]{1,2,3,4,5}创建一个二叉树;BinaryTree树=newBinaryTree(values);这应该预先填充值1-5像这样的二叉树:1/23/45这可以使用以下类来完成:classBinaryTree{intvalue;左二叉树;二叉树对;publicBinaryTree(int[]values):this(values,0){}BinaryTree(int[]values,intindex){Load(this,values,index);}voidLoad(BinaryTreetree,int[]values,intindex){this.value=values[index];if(index*2+1树类声明部分当然不难。您基本上已经解释了如何在问题中声明它:classBinaryTree{private:intdata;二叉树*左,*右;};这支持各种形式的遍历,如下所示:voidInorder(constBinaryTree*root){if(root==0)return;中序(根->左);printf("现在在%dn",root->data);顺序(根->右);您应该能够从顺序前后的遍历中推断出顺序。在实际实现中,树可能会被模板化以存储随机数据,当然遍历例程会更通用(使用用户数据输入,或者用户提供的每个节点回调,或其他)。如果您正在寻找全面的BinaryTree实现,您可以从C5GenericCollectionsLibrary中学习。由于我没有收到我提出的问题的任何答案,我将发布我自己使用数组实现的二叉树。现在我知道数组实现比我想象的要容易,但我仍然不知道如何使用链表来实现它。以上就是c#中的C#学习教程:Howtocreateabinarytree所有内容分享。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---classBinaryTree{privatestaticintMAX_ELEM=100;//数组的初始大小intlastElementIndex;int?[]数据数组;publicBinaryTree(){dataArray=newint?[MAX_ELEM];lastElementIndex=-1;}//将数据插入到树中的函数//作为完整的二叉树插入publicvoidinsertData(intdata){int?[]temp;如果(lastElementIndex+1=(2*index+1))返回(2*index+1);返回-1;}//用于获取数组中元素的右孩子的内部函数intgetRightChild(intindex){if(lastElementIndex>=(2*index+2))return(2*index+2);返回-1;}//检查树是否为空的函数publicboolisTreeEmpty(){if(lastElementIndex==-1)returntrue;返回假;}//中序遍历的递归函数publicvoidtraverseInOrder(intindex){if(index==-1)return;traverseInOrder(getLeftChild(index));Console.Write("{0}",dataArray[indeX]);traverseInOrder(getRightChild(index));}//前序遍历的递归函数publicvoidtraversePreOrder(intindex){if(index==-1)return;Console.Write("{0}",dataArray[index]);traversePreOrder(getLeftChild(index));traversePreOrder(getRightChild(index));}//后序遍历的递归函数publicvoidtraversePostOrder(intindex){if(index==-1)return;traversePostOrder(getLeftChild(index));traversePostOrder(getRightChild(index));Console.Write("{0}",dataArray[index]);}//按层序遍历树的函数publicvoidtraverseLevelOrder(){Console.WriteLine("nPrintingElementsOfTheTreeInAscendingLevelOdern");if(lastElementIndex==-1){Console.WriteLine("空树!...按任意键返回");控制台.ReadKey();返回;}for(inti=0;iclassBstNode{publicintdata;publicBstNode(intdata){this.data=data;}publicBstNodeleft;publicBstNoderight;}classProgram{publicstaticBstNodeInsert(BstNoderoot,intdata){if(root==null)root=newBstNode(data);}elseif(dataroot.data)root.right=Insert(root.right,data);返回根;}publicstaticvoidMain(string[]args){//创建/插入BSTBstNodeRoot=null;根=插入(根,15);根=插入(根,10);根=插入(根,20);根=插入(根,8);根=插入(根,12);根=插入(根,17);根=插入(根,25);}}本文收集自网络,不代表诸如此类的立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢