int main(int argc, char **argv) { CSTree T; TElemType e; TElemType e1; InitTree(&T); printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\ TreeEmpty(T), Root(T), TreeDepth(T)); CreateTree(&T); printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\ TreeEmpty(T), Root(T), TreeDepth(T)); printf("先根遍历树T:\n"); PreOrderTraverse(T, vi); printf("\n请输入等修改的结点的值 新值:"); scanf("%c%*c%c%*c", &e, &e1); Assign(&T, e, e1); printf("后根遍历修改后的树T:\n"); PostOrderTraverse_recurssion1(T, vi); printf("\n"); printf("PostOrderTraverse_recurssion1 complete!\n"); PostOrderTraverse_recurssion2(T, vi); printf("\n"); printf("PostOrderTraverse_recurssion2 complete!\n"); printf("\n%c的双亲是%c, 长子是%c,下一个兄弟是%c\n", e1, Parent(T, e1),\ LeftChild(T, e1), RightSibling(T, e1)); printf("层序遍历树:\n"); LevelOrderTraverse(T, vi); DestroyTree(&T); return EXIT_SUCCESS; }
int main() { Status i; int j; position p; TElemType e; TElemType s; InitBiTree( T ); CreateBiTree( T ); printf("After initializing the Tree, is the Tree empty? Yes:1, No:0, the depth is: %d\n", BiTreeEmpty( T ), BiTreeDepth(T)); i = Root( T, &e ); if( i ) printf("The root of the tree is: %d\n", e); else printf("The tree is empty!\n"); printf("Traverse_1:\n"); LevelOrderTraverse( T, visit ); printf("Traverse_2:\n"); InOrderTraverse( T, visit ); printf("Traverse_3:\n"); PostOrderTraverse( T, visit ); printf("input the level number to be modified \n"); scanf(" %d%d", &p.level, &p.order); e = Value( T, p); printf("The old value is %d, input new value: ", e); scanf(" %d", &e); Assign( T, p, e); printf("Traverse_1:\n"); PreOrderTraverse( T, visit ); printf("The parent of node %d is %d, left and right children are: ", e, Parent(T, e)); printf("%d, %d, left and rignt brothers are:", LeftChild(T, e), RightChild(T, e)); printf("%d, %d\n", LeftSibling(T, e), RightSibling(T, e)); InitBiTree( s ); printf("Initializing a Tree that has empty right subtree:\n"); CreateBiTree( s ); printf("The tree s insert to the tree T, input the parent node of s, s is left subtree or right subtree."); scanf(" %d%d%d", &p.level, &p.order, &j); DeleteChild( T, p, j); Print( T ); clearBiTRee( T ); printf("After clearing the tree, is the tree empty? Yes:1, No:0 %d\n", BiTreeEmpty( T ), BiTreeDepth(T)); i = Root( T, &e ); if( i ) printf("The root of the bitree is %d\n", e); else printf("The tree is empty, no root!\n"); }
void main() { int i; CSTree T, p, q; TElemType e, e1; InitTree(T); printf("构造空树后,树空否?%d(1:是 0:否)。树根为%c,树的深度为%d。\n", TreeEmpty(T), Root(T), TreeDepth(T)); CreateTree(T); printf("构造树T后,树空否?%d(1:是 0:否)。树根为%c,树的深度为%d。\n", TreeEmpty(T), Root(T), TreeDepth(T)); printf("层序遍历树T:\n"); LevelOrderTraverse(T, visit); printf("请输入待修改的结点的值 新值:"); scanf("%c%*c%c%*c", &e, &e1); Assign(T, e, e1); printf("层序遍历修改后的树T:\n"); LevelOrderTraverse(T, visit); printf("%c的双亲是%c,长子是%c,下一个兄弟是%c。\n", e1, Parent(T, e1), LeftChild(T, e1), RightSibling(T, e1)); printf("建立树p:\n"); CreateTree(p); printf("层序遍历树p:\n"); LevelOrderTraverse(p, visit); printf("将树p插到树T中,请输入T中p的双亲结点 子树序号:"); scanf("%c%d%*c", &e, &i); q = Point(T, e); InsertChild(T, q, i, p); printf("层序遍历修改后的树T:\n"); LevelOrderTraverse(T, visit); printf("先根遍历树T:\n"); PreOrderTraverse(T, visit); printf("\n后根遍历树T:\n"); PostOrderTraverse(T, visit); printf("\n删除树T中结点e的第i棵子树,请输入e i:"); scanf("%c%d", &e, &i); q = Point(T, e); DeleteChild(T, q, i); printf("层序遍历修改后的树T:\n"); LevelOrderTraverse(T, visit); DestroyTree(T); }
void main() { Status i; int j; position p; TElemType e; SqBiTree T,s; InitBiTree(T); CreateBiTree(T); printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); printf("层序遍历二叉树:\n"); LevelOrderTraverse(T,visit); printf("中序遍历二叉树:\n"); InOrderTraverse(T,visit); printf("后序遍历二叉树:\n"); PostOrderTraverse(T,visit); printf("请输入待修改结点的层号 本层序号: "); scanf("%d%d",&p.level,&p.order); e=Value(T,p); printf("待修改结点的原值为%d请输入新值: ",e); scanf("%d",&e); Assign(T,p,e); printf("先序遍历二叉树:\n"); PreOrderTraverse(T,visit); printf("结点%d的双亲为%d,左右孩子分别为",e,Parent(T,e)); printf("%d,%d,左右兄弟分别为",LeftChild(T,e),RightChild(T,e)); printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e)); InitBiTree(s); printf("建立右子树为空的树s:\n"); CreateBiTree(s); printf("树s插到树T中,请输入树T中树s的双亲结点 s为左(0)或右(1)子树: "); scanf("%d%d",&e,&j); InsertChild(T,e,j,s); Print(T); printf("删除子树,请输入待删除子树根结点的层号 本层序号 左(0)或右(1)子树: "); scanf("%d%d%d",&p.level,&p.order,&j); DeleteChild(T,p,j); Print(T); ClearBiTree(T); printf("清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); }
void main() { int i; CSTree T,p,q; TElemType e,e1; InitTree(T); printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",TreeEmpty(T),Root(T),TreeDepth(T)); CreateTree(T); printf("构造树T后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",TreeEmpty(T),Root(T),TreeDepth(T)); printf("先根遍历树T:\n"); PreOrderTraverse(T,vi); printf("\n请输入待修改的结点的值 新值: "); scanf("%c%*c%c%*c",&e,&e1); Assign(T,e,e1); printf("后根遍历修改后的树T:\n"); PostOrderTraverse(T,vi); printf("\n%c的双亲是%c,长子是%c,下一个兄弟是%c\n",e1,Parent(T,e1),LeftChild(T,e1),RightSibling(T,e1)); printf("建立树p:\n"); InitTree(p); CreateTree(p); printf("层序遍历树p:\n"); LevelOrderTraverse(p,vi); printf("\n将树p插到树T中,请输入T中p的双亲结点 子树序号: "); scanf("%c%d%*c",&e,&i); q=Point(T,e); InsertChild(T,q,i,p); printf("层序遍历树T:\n"); LevelOrderTraverse(T,vi); printf("\n删除树T中结点e的第i棵子树,请输入e i: "); scanf("%c%d",&e,&i); q=Point(T,e); DeleteChild(T,q,i); printf("层序遍历树T:\n",e,i); LevelOrderTraverse(T,vi); printf("\n"); DestroyTree(T); }
void test_LevelOrderTraverse(void) { BINARY_TREE_TYPE tree = get_test_tree( "1, 2, 3, , 5, 6, , , , 51, 52, 61, 62, , "); if (tree == NULL) return; visit_result = (ElementType*) malloc(sizeof(ElementType) * 9); visit_result_index = 0; Status status = LevelOrderTraverse(tree, visit); CU_ASSERT_EQUAL(status, OK); int expert_result[] = { 1, 2, 3, 5, 6, 51, 52, 61, 62 }; assert_visit_result(expert_result, 9); }
int main() { Status i; Position p; TElemType e; SqBiTree T; InitBiTree(T); CreateBiTree(T); printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); printf("层序遍历二叉树:\n"); LevelOrderTraverse(T); printf("前序遍历二叉树:\n"); PreOrderTraverse(T); printf("中序遍历二叉树:\n"); InOrderTraverse(T); printf("后序遍历二叉树:\n"); PostOrderTraverse(T); printf("修改结点的层号3本层序号2。"); p.level=3; p.order=2; e=Value(T,p); printf("待修改结点的原值为%d请输入新值:50 ",e); e=50; Assign(T,p,e); printf("前序遍历二叉树:\n"); PreOrderTraverse(T); printf("结点%d的双亲为%d,左右孩子分别为",e,Parent(T,e)); printf("%d,%d,左右兄弟分别为",LeftChild(T,e),RightChild(T,e)); printf("%d,%d\n",LeftSibling(T,e),RightSibling(T,e)); ClearBiTree(T); printf("清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); i=Root(T,&e); if(i) printf("二叉树的根为:%d\n",e); else printf("树空,无根\n"); return 0; }
//SqBiTree的测试程序 int main(int argc,char *argv[]) { int i=0; char buf[1024]; char e,newe; char *temp; bool k; position p; BiTree T,C; BiTree q,q2; InitBiTree(T); InitBiTree(C); printf("输入数据创建二叉树(#表示空):"); scanf("%s%*c",buf); temp=buf; CreateBiTree(T,temp,i); printf("\n遍历(前、中、后、层):"); PreOrderTraverse(T,Visit); printf("\n"); InOrderTraverse(T,Visit); printf("\n"); PostOrderTraverse(T,Visit); printf("\n"); LevelOrderTraverse(T,Visit); printf("\n二叉树是否为空:%s",BiTreeEmpty(T)==1?"空":"非空"); printf("\n树的深度:%d",BiTreeDepth(T)); printf("\n根节点的左孩子、双亲、左右孩子、左右兄弟节点"); q=LeftChild(T,*T); printf("\n%c %c %c %c %c %c",q==NULL?Nil:q->e,(q2=Parent(T,*q))==NULL?Nil:q2->e,(q2=LeftChild(T,*q))==NULL?Nil:q2->e, (q2=RightChild(T,*q))==NULL?Nil:q2->e,(q2=LeftSibling(T,*q))==NULL?Nil:q2->e, (q2=RightSibling(T,*q))==NULL?Nil:q2->e); printf("\n节点的新值:"); scanf("%c%*c",&newe); Assign(T,*q,newe); printf("\n替换后遍历(前、中、后、层):"); PreOrderTraverse(T,Visit); printf("\n"); InOrderTraverse(T,Visit); printf("\n"); PostOrderTraverse(T,Visit); printf("\n"); LevelOrderTraverse(T,Visit); printf("\n输入数据创建二叉树(#表示空):"); scanf("%s%*c",buf); temp=buf; i=0; CreateBiTree(C,temp,i); printf("\n输入要插入数据的层、序号和左右子树(0左1右):"); scanf("%d%d%d%*c",&p.level,&p.order,&k); InsertChild(T,p,k,C); printf("\n遍历(前、中、后、层):"); PreOrderTraverse(T,Visit); printf("\n"); InOrderTraverse(T,Visit); printf("\n"); PostOrderTraverse(T,Visit); printf("\n"); LevelOrderTraverse(T,Visit); printf("\n删除%d层%d个节点的右子树后遍历:",p.level,p.order); DeleteChild(T,p,1); printf("\n遍历(前、中、后、层):"); PreOrderTraverse(T,Visit); printf("\n"); InOrderTraverse(T,Visit); printf("\n"); PostOrderTraverse(T,Visit); printf("\n"); LevelOrderTraverse(T,Visit); DestroyBiTree(T); system("pause"); return 0; }
void main() { int i; BiPTree T,c,q; TElemType e1,e2; InitBiTree(&T); printf("构造空二叉树后,树空否?%d(1:是 0:否)树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); e1=Root(T); if(e1!=Nil) printf("二叉树的根为: "form"\n",e1); else printf("树空,无根\n"); #ifdef CHAR printf("请按先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)\n"); #endif #ifdef INT printf("请按先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树)\n"); #endif CreateBiTree(&T); printf("建立二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T)); e1=Root(T); if(e1!=Nil) printf("二叉树的根为: "form"\n",e1); else printf("树空,无根\n"); printf("中序递归遍历二叉树:\n"); InOrderTraverse(T,visitT); printf("\n后序递归遍历二叉树:\n"); PostOrderTraverse(T,visitT); printf("\n层序遍历二叉树:\n"); LevelOrderTraverse(T,visitT); printf("\n请输入一个结点的值: "); scanf("%*c"form,&e1); c=Point(T,e1); /* c为e1的指针 */ printf("结点的值为"form"\n",Value(c)); printf("欲改变此结点的值,请输入新值: "); scanf("%*c"form"%*c",&e2); Assign(c,e2); printf("层序遍历二叉树:\n"); LevelOrderTraverse(T,visitT); e1=Parent(T,e2); if(e1!=Nil) printf("\n"form"的双亲是"form"\n",e2,e1); else printf(form"没有双亲\n",e2); e1=LeftChild(T,e2); if(e1!=Nil) printf(form"的左孩子是"form"\n",e2,e1); else printf(form"没有左孩子\n",e2); e1=RightChild(T,e2); if(e1!=Nil) printf(form"的右孩子是"form"\n",e2,e1); else printf(form"没有右孩子\n",e2); e1=LeftSibling(T,e2); if(e1!=Nil) printf(form"的左兄弟是"form"\n",e2,e1); else printf(form"没有左兄弟\n",e2); e1=RightSibling(T,e2); if(e1!=Nil) printf(form"的右兄弟是"form"\n",e2,e1); else printf(form"没有右兄弟\n",e2); InitBiTree(&c); printf("构造一个右子树为空的二叉树c:\n"); #ifdef CHAR printf("请先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)\n"); #endif #ifdef INT printf("请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为左子树的二叉树)\n"); #endif CreateBiTree(&c); printf("先序递归遍历二叉树c:\n"); PreOrderTraverse(c,visitT); printf("\n树c插到树T中,请输入树T中树c的双亲结点 c为左(0)或右(1)子树: "); scanf("%*c"form"%d",&e1,&i); q=Point(T,e1); InsertChild(q,i,c); printf("先序递归遍历二叉树:\n"); PreOrderTraverse(T,visitT); printf("\n删除子树,请输入待删除子树的双亲结点 左(0)或右(1)子树: "); scanf("%*c"form"%d",&e1,&i); q=Point(T,e1); DeleteChild(q,i); printf("先序递归遍历二叉树:\n"); PreOrderTraverse(T,visitT); printf("\n"); DestroyBiTree(&T); }
/* Main Function of Binary tree */ int main() { int ch,f,data; tree *root; root=createTree(); queue *Q; Q=create(); while(1){ printf("\n<1> Insert, "); printf("<2> Delete , "); printf("<3> PreOrder, "); printf("<4> InOrder, \n"); printf("<5> PostOrder,"); printf("<6> Delete Tree"); printf("<7> Height/Depth of tree, \n "); printf("<8> Maximum Node, "); printf("<9> Total Nodes Of Tree, "); printf("<10>LevelOrder traversal\n"); printf("<0>Exit, Choice: "); scanf("%d",&ch); switch(ch){ case 1: printf("\tNode Value :"); scanf("%d",&data); Insert(&root,data); break; case 2: printf("\tNode To Delete :"); scanf("%d",&data); f=Delete(&root,data); if(f) printf("Deleted Node:%d\n",f); break; case 3: Preorder(root); break; case 4: Inorder(root); break; case 5: Postorder(root); break; case 6: DeleteTree(root); root=createTree(); break; case 7: f=heightOfBinary(root); printf("\n(Non-recursive)Height/Depth OfBinary : %d\n",f); // f=depthOfBinary(root); // printf("(Recursive)Height/Depth OfBinary : %d\n",f); break; case 8: f=findMaxValue(root); printf("Maximum Value OfBinary : %d\n",f); break; case 9: f=sizeOfBinary(root); printf("Number of Nodes: %d\n",f); break; case 10: printf("\n"); f=LevelOrderTraverse(root); printf("\n\nNumber of Nodes : %d\n",f); break; case 0: DeleteTree(root); exit(0); break; default : printf("\tInvalid Choice\n"); } } }