void PostOrderTraverse(BinaryTree * binaryTree,void(*visit)()){ if(binaryTree){ PostOrderTraverse(binaryTree->lChild,visit); PostOrderTraverse(binaryTree->rChild,visit); visit(Value(binaryTree,Root(binaryTree))); } }
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"); }
/*后序遍历,采用递归*/ void PostOrderTraverse(BiTree T,void (visit)(BiTree)){ if(T){ PostOrderTraverse(T->lchild,visit); PostOrderTraverse(T->rchild,visit); visit(T); } }
void PostOrderTraverse(BiTree T) { if (T == NULL) return; PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%d\n", T->data); }
/// 后序遍历 void PostOrderTraverse(TreeNode* root) { if(root == NULL) return; PostOrderTraverse(root->left); PostOrderTraverse(root->right); /// Visit(root); }
void PostOrderTraverse(BiThrTree btt) { if(btt) { PostOrderTraverse(btt->lchild); PostOrderTraverse(btt->rchild); printf("%c",btt->data); } }
void PostOrderTraverse(BiPTree T,Status(*Visit)(BiPTree)) { /* 后序递归遍历二叉树T */ if(T) { PostOrderTraverse(T->lchild,Visit); /* 后序遍历左子树 */ PostOrderTraverse(T->rchild,Visit); /* 后序遍历右子树 */ Visit(T); /* 最后访问根结点 */ } }
Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) )//后序遍历二叉树 { if(T==NULL) return 0; PostOrderTraverse(T->lchild,Visit); PostOrderTraverse(T->rchild,Visit); Visit(T->data); return 1; } // PostOrderTraverse
void PostOrderTraverse(BitTree t){ if(!t) return; PostOrderTraverse(t->lchild); PostOrderTraverse(t->rchild); printf("%c",t->data); }
//后序递归遍历 int PostOrderTraverse(BiTree T) { if(T!=NULL) { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c",T->data); } return true; }
Status PostOrderTraverse(BiTree T,Status (* visit)(TElemType e)) { //递归后序遍历 if(T) { PostOrderTraverse(T->lchild,visit); PostOrderTraverse(T->rchild,visit); visit(T->data); } return OK; }
void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType)) { /* 初始条件: 二叉树T存在,Visit是对结点操作的应用函数 */ /* 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次 */ if(T) /* T不空 */ { PostOrderTraverse(T->lchild,Visit); /* 先后序遍历左子树 */ PostOrderTraverse(T->rchild,Visit); /* 再后序遍历右子树 */ Visit(T->data); /* 最后访问根结点 */ } }
void PostOrderTraverse(BiTree T,Status(*Visit)(TElemType)) { // 初始条件: 二叉树T存在,Visit是对结点操作的应用函数 // 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T) // T不空 { PostOrderTraverse(T->lchild,Visit); // 先后序遍历左子树 PostOrderTraverse(T->rchild,Visit); // 再后序遍历右子树 Visit(T->data); // 最后访问根结点 } }
//后序遍历 Status PostOrderTraverse(BiTree T) { if(T) { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c",T->data); } return OK; }
/* 操作结果: 后序递归遍历T,对每个结点调用函数Visit一次且仅一次 */ void PostOrderTraverse(BiTree T, Status(* Visit)(TElemType)) { if (T) { if (T->lchild) PostOrderTraverse(T->lchild, Visit); if (T->rchild) PostOrderTraverse(T->rchild, Visit); Visit(T->data); } }
/*后序遍历二叉树*/ void PostOrderTraverse(BiTree T) { if(!T) return; else { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); printf("%c",T->data); } }
void PostOrderTraverse(BiTree T) { BiTree p = NULL; p = T; if (p != NULL) { PostOrderTraverse(p->lchild); PostOrderTraverse(p->rchild); printf("%4c",p->data); } }
void PostOrderTraverse(BSTree BST) { if (BST) { PostOrderTraverse(BST->left); PostOrderTraverse(BST->right); int i; for (i = 0; i < BST->count; i++) { printf("%d ", BST->value); } } }
status PostOrderTraverse(Node* T) //后序遍历算法 { if(T == NULL) { return TRUE; } PostOrderTraverse(T->lChild); PostOrderTraverse(T->rChild); printf("%d ",T->data); return TRUE; }
Status PostOrderTraverse( BiTree T) { // 后序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句 if(T) { if(PostOrderTraverse(T->lchild)) if(PostOrderTraverse(T->rchild)) if(PrintElement(T->data)) return OK; return ERROR; }else return OK; } // PostOrderTraverse
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() { 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; }
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(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; }
void PostOrderTraverse(CSTree T, void (*Visit)(TElemType)) { CSTree p; if (T) { if (T->firstchild) { PostOrderTraverse(T->firstchild, Visit); p = T->firstchild->nextsibling; while (p) { PostOrderTraverse(p, Visit); p = p->nextsibling; } } Visit(Value(T)); } }
void BiTree_Test() { BiTree T = (BiTree)malloc(sizeof(BiTNode)); T->data = 10; BiTNode* c1 = (BiTNode *)malloc(sizeof(BiTNode)); c1->data = 5; T->lchild = c1; BiTNode* c2 = (BiTNode *)malloc(sizeof(BiTNode)); c2->data = 7; c1->rchild = c2; BiTNode* c3 = (BiTNode *)malloc(sizeof(BiTNode)); c3->data = 3; c1->lchild = c3; BiTNode* c4 = (BiTNode *)malloc(sizeof(BiTNode)); c4->data = 15; T->rchild = c4; // PreOrderTraverse(T); // InOrderTraverse(T); PostOrderTraverse(T); }
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"); }
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[]) { 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; }