//二叉树的先序遍历递归方法 void PreOrderTraverse(treeNode *T,int node1,int node2) { if(!T) return; if(T->data==node1) pnode1=T; if(T->data==node2) pnode2=T; PreOrderTraverse(T->lchild,node1,node2); PreOrderTraverse(T->rchild,node1,node2); }
Status PreOrderTraverse(BiTree T, Status (* Visit)(TElemType e)) { if (T) { if (Visit(T->data)) if (PreOrderTraverse(T->lchild, Visit)) if (PreOrderTraverse(T->rchild, Visit)) return OK; return ERROR; } else { return OK; } }
/*先序遍历二叉树*/ void PreOrderTraverse(BiTree T) { if(!T) return; else { printf("%c",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } }
void PreOrderTraverse(BiTree T) { BiTree p = NULL; p = T; if (p != NULL) { printf("%4c",p->data); PreOrderTraverse(p->lchild); PreOrderTraverse(p->rchild); } }
void PreOrderTraverse(SearchTree T) { if(T==NULL) return; else { printf("%d ",T->Element); PreOrderTraverse(T->LChild); PreOrderTraverse(T->RChild); } }
Status PreOrderTraverse(BiTree T) { // 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句 if(T) { if(PrintElement(T->data)) if(PreOrderTraverse(T->lchild)) if(PreOrderTraverse(T->rchild)) return OK; return ERROR; }else return OK; } // PreOrderTraverse
void PreOrderTraverse(BSTree BST) { if (BST) { int i; for (i = 0; i < BST->count; i++) { printf("%d ", BST->value); } PreOrderTraverse(BST->left); PreOrderTraverse(BST->right); } }
status PreOrderTraverse(Node* T) //前序递归遍历二叉树算法 T为根节点 { if(T == NULL) { return TRUE; } printf("%d ",T->data); PreOrderTraverse(T->lChild); PreOrderTraverse(T->rChild); return TRUE; }
int main(int argc, char const *argv[]) { int i, Len; int* Array; Tree T; Len = 16; Array = malloc(sizeof(int) * Len); for (i = 0; i < Len; ++i) Array[i] = i; T = sortedArrayToBST(Array, Len); PreOrderTraverse(T); printf("\n"); InOrderTraverse(T); printf("\n"); PostOrderTraverse(T); printf("\n"); return 0; }
int main(int argc, char *argv[]) { BiTree T,H; printf("请创建一棵二叉树(如:'ABDH##I##EJ###CF##G##')\n"); CreateBinaryTree(&T); printf("\n二叉树的深度为:%d,结点数目为:%d\n",BinaryDepth(T),NodeCount(T)); printf("\n先序遍历的结果是:\n"); PreOrderTraverse(T); printf("\n中序遍历的结果是:\n"); InOrderTraverse(T); printf("\n后序遍历的结果是:\n"); PostOrderTraverse(T); printf("\n对二叉树进行中序线索化\n"); InOrderThreading(&H,T); printf("\n中序遍历线索二叉树的结果是:\n"); InOrderTraverseThreadTree(H); printf("\n摧毁一棵二叉树\n"); DestoryBinaryTree(&T); printf("\n二叉树的深度为:%d,结点数目为:%d\n",BinaryDepth(T),NodeCount(T)); return 0; }
main() { BiTNode * n1 = MakeNode(10, NULL, NULL); BiTNode * n2 = MakeNode(20, NULL, NULL); BiTNode * n3 = MakeNode(30, n1, n2); BiTNode * n4 = MakeNode(40, NULL, NULL); BiTNode * n5 = MakeNode(50, NULL, NULL); BiTNode * n6 = MakeNode(60, n4, n5); BiTNode * n7 = MakeNode(70, NULL, NULL); BiTree tree = InitBiTree(n7); SetLChild(tree, n3); SetRChild(tree, n6); printf("树的深度为:%d \n", GetDepth(tree)); printTree(tree, GetDepth(tree)); printf("\n先序遍历如下:"); PreOrderTraverse(tree, print); printf("\n中序遍历如下:"); InOrderTraverse(tree, print); printf("\n后序遍历如下:"); PostOrderTraverse(tree, print); DeleteChild(tree, 1); printf("\n后序遍历如下:"); PostOrderTraverse(tree, print); DestroyBiTree(tree); if (IsEmpty(tree)) printf("\n二叉树为空,销毁完毕\n"); }
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; }
void TestOrderTraverse(){ BitNode lchild ={ 'l', NULL,NULL }; BitNode rchild = { 'r', NULL,NULL }; BitNode root = { 'm', &lchild,&rchild }; BitTree root2 = &root; BitTree root3 = &root; PreOrderTraverse(&root); printf("\n"); InOrderTraverse(root2); printf("\n"); PostOrderTraverse(root3); printf("\n"); }
/** *Binary Search Tree Tester */ int main() { SearchTree T=(SearchTree)malloc(sizeof(struct TreeNode)); T=NULL; int a[6]={6,4,2,5,8,10}; T=CreateBinarySearchTree(T,a,6); //T=Insert(4,T); PreOrderTraverse(T); printf("\n"); T=Delete(8,T); printf("main %d\n",T->Element ); PreOrderTraverse(T); //Position P=Find(7,T); //printf("%d\n",P->Element ); return 0; }
void test1() { int data[] = {35, 6, 15, 65, 7, 46, 17, 43, 3, 7}; // int data[] = {3}; int size = sizeof(data)/sizeof(*data); // printf("size = %d\n", size); BSTree BST = NULL; BuildBSTree(BST, data, 0, size - 1); PreOrderTraverse(BST); printf("\n"); MidOrderTraverse(BST); printf("\n"); PostOrderTraverse(BST); printf("\n"); BSTree node = SearchBST(BST, 17, 0); if (!node) printf("Search failed.\n"); else printf("Search success, the search value is %d.\n", node->value); int n; scanf("%d", &n); while (n != -1) { DeleteNode(BST, n); // printf("Delete node %d.\n", n); MidOrderTraverse(BST); printf("\n"); scanf("%d", &n); } printf("\n"); }
int main() //主函数 { BiTree T=NULL; int i,n,e; //生成二叉排序树T scanf("%d",&i); while(i!=-1) { e=i; InsertBiTree(T,e); scanf("%d",&i); } //前、中、后序遍历二叉树 PreOrderTraverse(T,PrintElement); printf("\n"); InOrderTraverse(T,PrintElement); printf("\n"); PostOrderTraverse(T,PrintElement); printf("\n"); //计数并输出 printf("%d\n", TreeCount(T)); return 0;//补充代码 }//main
int main(int argc, char const *argv[]) { //int err; struct Tree *T; char *ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; T = CreateTree(ch); printf("递归先序遍历\n"); PreOrderTraverse(T); printf("\n"); printf("递归中序遍历\n"); InOrderTraverse(T); printf("\n"); printf("递归后序遍历\n"); PostOrderTraverse(T); printf("\n"); printf("非递归先序遍历\n"); PreOrderTraverseStack(T); printf("\n"); printf("非递归中序遍历\n"); InOrderTraverseStack(T); printf("\n"); printf("非递归后序遍历\n"); PostOrderTraverseStack(T); printf("\n"); return 0; }
int main(int argc, char const *argv[]) { Tree T; int Postorder[] = {4, 7, 9, 12, 10, 8}; int Inorder[] = {4, 7, 8, 9, 10, 12}; // T = CreateTree(); // PreOrderTraverse(T); // printf("\n"); // InOrderTraverse(T); // printf("\n"); // PostOrderTraverse(T); // printf("\n"); T = buildTree(Inorder, sizeof(Inorder) / sizeof(Inorder[0]), Postorder, sizeof(Postorder) / sizeof(Postorder[0])); PreOrderTraverse(T); printf("\n"); InOrderTraverse(T); printf("\n"); PostOrderTraverse(T); printf("\n"); return 0; }
int main() { BiTree root=NULL; printf("Create BiTree..\n"); CreateBiTree(&root); printf("\nDone!!!!\n"); printf("PreOrderTraverse..\n"); PreOrderTraverse( root); printf("\n"); PreOrderTraverse_1( root); printf("\nDone!!!!\n"); printf("InOrderTraveerse..\n"); InOrderTraverse(root); printf("\n"); InOrderTraverse_1(root); printf("\nDone!!!!\n"); printf("PostOrderTravaerse..\n"); PostOrderTraverse(root); printf("\n"); PostOrderTraverse_1(root); printf("\nDone\n"); BiTree_free(&root); return 0; }
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"); }
Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 算法6.1 // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数, // 先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 // 最简单的Visit函数是: // Status PrintElement( ElemType e ) { // 输出元素e的值 // printf( e ); // 实用时,加上格式串 // return OK; // } // 调用实例:PreOrderTraverse(T, PrintElement); if (T) { if (Visit(T->data)) if (PreOrderTraverse(T->lchild, Visit)) if (PreOrderTraverse(T->rchild, Visit)) return OK; return ERROR; } else return OK; } // PreOrderTraverse
int main(int argc, char const *argv[]) { BiTree test = NULL; CreateBitree(&test); PreOrderTraverse(test, PrintElement); return 0; }
int main() { BiThrTree bt,btt; CreateBiTree(bt); InOrderTraverse(btt,bt); PreOrderTraverse(bt); printf("\n"); return 0; }
int main() { int level = 1; BTree T = NULL; CreateTree(T); PreOrderTraverse(T,level); return 0; }
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; }
int main() //主函数 { BiTree Ta=NULL,Tb=NULL; int i,n,e; scanf("%d",&n);//生成二叉排序树Ta for(i=0;i<n;i++){ scanf("%d",&e); InsertBiTree(Ta,e); } //前、中、后序遍历二叉树 PreOrderTraverse(Ta,PrintElement); printf("\n"); //getchar(); InOrderTraverse(Ta,PrintElement); printf("\n"); //getchar(); PostOrderTraverse(Ta,PrintElement); printf("\n"); //getchar(); //printf("Start to copy:\n"); //getchar(); TreeCopy(Ta,Tb);//复制生成Tb scanf("%d",&e); InsertBiTree(Tb,e);//在Tb中插入新结点 PreOrderTraverse(Tb,PrintElement); printf("\n"); InOrderTraverse(Tb,PrintElement); printf("\n"); PostOrderTraverse(Tb,PrintElement); printf("\n"); scanf("%d",&e); InsertBiTree(Ta,e); PreOrderTraverse(Ta,PrintElement); printf("\n"); InOrderTraverse(Ta,PrintElement); printf("\n"); PostOrderTraverse(Ta,PrintElement); printf("\n"); return 0;//补充代码 }//main
int main(void){ BiTree T; int i,j; printf("创建15个随机数据\n"); CreatBST(T,15,InputElemType); printf("\n中序遍历随机数据:\n"); PreOrderTraverse(T,VisitElemType); printf("\n\n随机删除10个数据:\n"); for(i=0;i<10;i++){ j=rand()%50; if(DeleteBST(T,j))printf("%3d %3d 删除成功! V\n",i,j); else printf("%3d %3d 删除失败! X\n",i,j); } printf("\n中序遍历删除后的数据:\n"); PreOrderTraverse(T,VisitElemType); printf("\nResult End!\n"); system("pause"); return 0; }
void main() { BiTree T; CreateBiTree(T); printf("依次先序中序后序输出:\n"); PreOrderTraverse(T,visit); printf("\n"); InOrderTraverse(T,visit); printf("\n"); PostOrderTraverse(T,visit); printf("\n"); printf("树的深度为:%d\n",BiTreeDepth(T)); printf("树的叶子节点数为:%d\n",Leaf(T)); }
void main() { ALGraph g; CSTree t; printf("请选择无向图\n"); CreateGraph(g); // 构造无向图g Display(g); // 输出无向图g DFSForest(g,t); // 建立无向图g的深度优先生成森林的孩子—兄弟链表t printf("先序遍历生成森林:\n"); PreOrderTraverse(t,print); // 先序遍历生成森林的孩子—兄弟链表t printf("\n"); }
void main() { ALGraph g; CSTree t; printf("请选择无向图\n"); CreateGraph(g); Display(g); DFSForest(g,t); printf("先序遍历生成森林:\n"); PreOrderTraverse(t,print); printf("\n"); }