C++ 程序实现三叉树
c++server side programmingprogramming
三叉树是一种树形数据结构,其中每个节点最多有三个子节点,通常表示为"左"、"中"和"右"。在此树中,具有子节点的节点是父节点,子节点可能包含对其父节点的引用。这是一个 C++ 程序,用于实现三叉树和树的遍历。
算法
Begin Declare function insert(struct nod** root, char *w) if (!(*root)) then *root = newnod(*w); if ((*w) < (*root)->d) then insert(&( (*root)->l ), w); else if ((*w) > (*root)->d) then insert(&( (*root)->r ), w); else if (*(w+1)) insert(&( (*root)->eq ), w+1); else (*root)->EndOfString = 1; End.
对于树的遍历:
Begin Declare function traverseTTtil(struct nod* root, char* buffer, int depth) if (root) then traverseTTtil(root->l, buffer, depth) buffer[depth] = root->d if (root->EndOfString) then buffer[depth+1] = '\0' print the value of buffer. traverseTTtil(root->eq, buffer, depth + 1); traverseTTtil(root->r, buffer, depth); End.
示例
#include<stdlib.h> #include<iostream> using namespace std; struct nod { char d; unsigned End. fString: 1; struct nod *l, *eq, *r; }*t = NULL; struct nod* newnod(char d) { t = new nod; t->d = d; t->End. fString = 0; t->l = t->eq = t->r = NULL; return t; } void insert(struct nod** root, char *w) { if (!(*root)) *root = newnod(*w); if ((*w) < (*root)->d) insert(&( (*root)->l ), w); else if ((*w) > (*root)->d) insert(&( (*root)->r ), w); else { if (*(w+1)) insert(&( (*root)->eq ), w+1); else (*root)->End. fString = 1; } } void traverseTTtil(struct nod* root, char* buffer, int depth) { if (root) { traverseTTtil(root->l, buffer, depth); buffer[depth] = root->d; if (root->End. String) { buffer[depth+1] = '\0'; cout<<buffer<<endl; } traverseTTtil(root->eq, buffer, depth + 1); traverseTTtil(root->r, buffer, depth); } } void traverseTT(struct nod* root) { char buffer[50]; traverseTTtil(root, buffer, 0); } int main() { struct nod *root = NULL; insert(&root, "mat"); insert(&root, "bat"); insert(&root, "hat"); insert(&root, "rat"); cout<<"以下是三叉树的遍历\n"; traverseTT(root); }
输出
以下是三叉树的遍历 bat hat mat rat