Template class exercises - binary tree

xiaoxiao2021-03-06  64

The following is an implementation of the basic operation of the binary tree, such as creating unordered two-fork, binary sorting trees, three recursive traverses and non-recursion traversal, looking, insertion, deletion, and calculation of the calculation of the leaves and the depth of the tree. #include "iostream.h" #include "stdlib.h" #include "stack.h" #pragma onCe

Template Class CBitree {public: cbitree (void) {

} ~ Cbitree (void) {}

STATIC STRUCT _TAGBITNODE {T Data; struct _tagbitnode * lchild; struct _tagbitnode * rchild;}; private: typedf _tagbitnode bitnode, * bitree

Public: Bool CreateBitree (Bitree & T); Bitree T, Void (* Visit) (Bitree T, Void (* Visit) (T Data)); BOOL InorderTraverse (Bitree T, Void (* Visit) (T Data)); BOOL inordertraverseex (Bitree T, Void (* ViID (* Visit)); Bool PostRraverse (Bitree T, Void (* Visit)); BOOL PostRraverseex (Bitree T, Void (* Visit); Void Countleaf (Bitree T, INT & Count); int BitReedepth (Bitree T); // Bit Sort Tree Operation Void Createsortbitbitree (Bitree & Root, T * a, Int N); Void InsertNode (Bitree & Root, T E); Bool Deletenode (Bitree & T, T & E); Bool Searchnode (Bitree T, T Key, Bitree F, Bitree & P); Private: Void deleteNode (Bitree & P);

}

// Create a disorderly binary tree Template Bool CBitree :: Createbitree (Bitree & T) {INT N; CIN >> N; IF (n == 0) T = NULL; ELSE {IF (! T = new bitnode; t-> data = n; createbitree (t-> lchild); CreateBitree (t-> rchild);} return true;} // First traversal recursive Template Bool CBitree :: Preordertraverse (Bitree T, Void (* Visit) (T Data)) {if (t! = Null) {VISITRAVERSE (T-> Lchild, Visit); PreordertRAVERSE (PREORDERTRAVERSE) T-> rchild, visit;} Return False;} // First traversal, stack indicates Template Bool CBitree :: PreordertRraverseex (Bitree T, Void (* ViIT) (T Data)) {Try {Cstack :: _ tagstack s; // stack cstack stack; // if (stack == null) // Return False;

Bitree p = new bitnode;

IF (p == null) Return False;

Stack.initstack (s); p = T; while (p ||! stack.stackempty (s)) {if (p) {VISIT (P-> DATA); stack.push (s, p); p = P -> lchild;} else {stack.pop (s, p); p = p-> rChild;}} stack.destroystack (s); return true;} catch (...) {visit (-1); Return False;}} // Sub-sequence traversal, recursive algorithm Template Bool CBitree LCHILD, VISIT); VISIT (T-> DATA); Inordertraverse (T-> rchild, visit);} return true;} // Sub-sequence traversal, stack indicates Template BOOL CBITREE : : Inordertraverseex (Bitree T, Void (* Visit)) {Try {cstack :: _ tagstack s; cstack stack;

Bitree p = new bitnode; p = T; stack.initstack (s); while (p ||! Stack.stackempty (s)) {if (p) {stack.push (s, p); p = p-> Else} else {stack.pop (s, p); Visit (p-> data); p = p-> rchild;}} stack.destroystack (s); return true;} catch (...) {VISIT (-1); return false;}} // sequence traversal, recursive algorithm Template BOOL CBITREE :: PostRetertraverse (Bitree T, Void (* Visit) (T Data) {if (t! = NULL) {Preordertraverse (T-> Lchild, Visit); Preordertraverse (T-> rchild, visit); Visit (T-> Data);} return true;} // sequence traversal, stack indicates Template Bool CBitree :: PostRDertraverseex (Bitree T, Void (* Visit) (T Data)) {try {cstract :: _ tagstack s; cstack stack; bitree p = new bitnode; p = t; Stack.initstack (s); while (p ||! stack.stackeempty (s)) {if (p) {stack.push (s, p-> lchild); p = p -> lchild;} else {Visit P-> DATA); Stack.POP (S, P); P = P-> rchild; Visit (P-> Data);}} Return True;} catch (...) {visit (-1); return False;}} // count the number of leaves Template Voi D CBitree :: Countleaf (Bitree T, INT & Count) {IF (t! = null) {Countleaf (t-> lchild, count); countleaf (t-> rchild, count); // Check Number T Whether it is a leaf node, if yes, quantitative count if (t-> lchild == null && t-> rchild == null) count ;}} // tree depth Template T> int citree :: BitReedepth (Bitree T) {Int Dep; Int Dep DePrigth;

IF (t == null) DEP = -1; if (t! = null) {depleft = bitreedepth (t-> lchild); Deprigth = BitReedepth (t-> rchild); Dep = 1 (DEPLEFT> DEPRIGTH? DEPLEFT : Deprigth);} Return Dep;} // Template Bool CBitree :: Searchnode (Bitree T, T Key, Bitree F, Bitree & P) {IF (t == null) {p = f; Return false;} else if (key == t-> data) {p = T; return true;} else if (key data) {searchNode (t-> lchild, key, t, p);} Else Searchnode (t-> rchild, key, t, p);

} template void cbitree :: insertnode (Bitree & root, t e) {bitree t = root; Bitree P = null; Bitree NewNode = new bitnode; while (t) {p = t; if (e <= T-> DATA) T = T-> LCHILD; ELSE T = T-> rchild;} newNode-> Data = E; newNode-> lchild = newNode-> rchild = NULL; if (p == null) root = newNode; Else if (e data) p-> lchild = newNode; Else P-> rchild = newNode;} / / Find the node to delete, remove nodes Template void citree :: deletenode (Bitree & P) {Bitree Q; Bitree S; if (! p-> lchild) {q = p; p = p-> rchild; free (q);} else if (! p-> rchild) {Q = p; p = p-> lchild; free (q);} else {= p; s = p-> lchild; while (s-> rchild) {q = S; s = S-> rCHILD; } P-> DATA = S-> Data; if (q! = P) q-> rchild = S-> LCHILD; ELSE Q-> LCHILD = S-> LCHILD;}} // Find the node to delete, And remove Template Bool CBitree :: DeleteNode (Bitree & T, T & E) {if (! T) Return False; else {= == T-> DATA) deleteNode (T); else IF (E data) deletenode (t-> lchild, e); else deletenode (t-> rchild, e); return true;}} // n Total length for data N = SizeOf (a) / sizeof (a [0]); Template void cbitree :: CreateSortree (Bitree & root, t * a, int N) {for (int I {I

Cout << "/ nbitree: --------------------- / n"; cbitree :: _ tagbitnode * p1 = null;

Coutree * Tree = new cbitree ; cout << "/ n tree depth is:" << Tree-> BitReedepth (T) << Endl; int N = 0;

INT A [] = {8, 6, 9, 10, 23, 2, 3, 0, 4, 0, 5};

Tree-> CreateSortbitbitbitbitbitbitBitree (P1, A, SIZEOF (A) / SizeOf (a [0])); cout << "/ n pre-sequence / N"; Tree-> PreordRraverse (P1, & Print); cout << " / N "; Tree-> PreordRraverseex (P1, & Print); cout <<" / n order traversal / n "<< Endl; Tree-> inordertraverse (p1, & print); cout <<" / n "; Tree- > Inordertraverseex (P1, & Print); Tree-> Countleaf (p1, n); Cout << "/ N tree depth is:" << Tree-> BitReedepth (P1) << Endl;

Cout << "Leaves:" << n << endl;

COUT << "Find" << Endl; Int K0 = 3; IF (Tree-> Searchnode (P1, 3, Null, T)) {cout << "Found" << Endl; Tree-> DeleteNode (P1, K0); Tree-> inordertraverse (P1, & Print);} else cout << "Did not find" << endl;}

转载请注明原文地址:https://www.9cbs.com/read-89960.html

New Post(0)