树的四种递归遍历(C++读文件)
程序员文章站
2022-03-23 19:37:38
从“tree.in”文件里读取字符串,构造树,若遇到’0’,则认为是空树,然后对该树进行四种遍历
#include
#include
#i...
从“tree.in”文件里读取字符串,构造树,若遇到’0’,则认为是空树,然后对该树进行四种遍历
#include #include #include #include #include #include using namespace std; #define elemtype char typedef struct treenode { struct treenode * lchild; struct treenode * rchild; elemtype data; }treenode,* tree; void createtree(tree & t, string str) { static int n = 0; if (str.length() <= n) return; elemtype ch = str[n++]; if (ch == '0') t = null; else { t = (treenode*)malloc(sizeof(treenode)); t->data = ch; createtree(t->lchild, str); createtree(t->rchild, str); } } //递归前中后序 void preorder(tree & t) { if (t) { std::cout << t->data<<" "; preorder(t->lchild); preorder(t->rchild); } } void inorder(tree & t) { if (t) { inorder(t->lchild); std::cout << t->data<<" "; inorder(t->rchild); } } void postorder(tree & t) { if (t) { postorder(t->lchild); postorder(t->rchild); std::cout << t->data<<" "; } } void levelorder(tree & t) { queue q; if (t) { q.push(t); while (!q.empty()) { tree temp = q.front(); cout << temp->data << " "; q.pop(); if (temp->lchild) q.push(temp->lchild); if (temp->rchild) q.push(temp->rchild); } } } int main() { ifstream ifs; ifs.open("tree.in"); string str; ifs >> str; cout << str << endl; tree t; createtree(t, str); preorder(t); cout << endl; createtree(t, str); inorder(t); cout << endl; createtree(t, str); postorder(t); cout << endl; createtree(t, str); levelorder(t); cout << endl; ifs.close(); system("pause"); return exit_success; }