求数据结构树转换为二叉树的C语言代码,一定要能在code blocks上运行的!!!!!!

代码包括树转换为二叉树,是C语言代码,后面要有包括树的遍历,最好这几天能有!! 要在code blocks上能运行!!!!!!

#include <cstdio>
#include <cstdlib>
#include <algorithm>

using namespace std;

struct Node
{
int key, heap, tot;
Node *left, *right;
} *root;
int getT(Node *root)
{
if (root == NULL)
return 0;
return root->tot;
}
void Update(Node *root)
{
if (root == NULL)
return;
root->tot = getT(root->left) + getT(root->right) + 1;
}
Node *Merge(Node *p, Node *q)
{
if (p == NULL)
return q;
if (q == NULL)
return p;
if (p->heap < q->heap)
{
p->right = Merge(p->right, q);
Update(p);
return p;
}
else
{
q->left = Merge(p, q->left);
Update(q);
return q;
}
}
void Delete(Node *&root)
{
root = Merge(root->left, root->right);
Update(root);
}
void find1(Node *&root, int k)
{
if (root == NULL)
return;
if (k == root->key)
{
Delete(root);
return;
}
if (k < root->key)
find1(root->left, k);
else
find1(root->right, k);
Update(root);
}
int find2(Node *root, int k)
{
if (root == NULL)
return -1;
int left = getT(root->left);
if (left + 1 == k)
return root->key;
if (left >= k)
return find2(root->left, k);
else
return find2(root->right, k - left - 1);
}
int find3(Node *root, int k)
{
if (root == NULL)
return -1;
if (k <= root->key)
return find3(root->left, k);
else
return max(find3(root->right, k), root->key);
}
void Insert(Node *&root, int k)
{
if (root == NULL)
{
root = new Node;
root->key = k;
root->heap = rand();
root->tot = 1;
root->left = root->right = NULL;
return;
}
root->tot++;
if (k < root->key)
{
Insert(root->left, k);
if (root->left->heap < root->heap)
{
Node *tmp = root->left;
root->left = tmp->right;
tmp->right = root;
Update(root);
Update(tmp);
root = tmp;
}
}
else
{
Insert(root->right, k);
if (root->right->heap < root->heap)
{
Node *tmp = root->right;
root->right = tmp->left;
tmp->left = root;
Update(root);
Update(tmp);
root = tmp;
}
}
}
int main(int argc, const char *argv[])
{
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-14
能不能详细的给一下这个题目的输入输出和其他提示信息,你这么说的话,可自由发挥的空间太大了,不知道你究竟要什么。比如“树”用什么数据结构表示,“二叉树”用什么数据结构表示,“树”的遍历还是“二叉树”的遍历,用那种遍历方式等等。追问

输入输出可以自由发挥,链表和广义表写都可以,遍历二叉树,遍历方式包括前序,后序,中序,最好也能有后根遍历,输入树的数据,转换为二叉树,内容可以稍微复杂点。

...的输出结果是什么?? 这个怎么做啊,我在自学中,求解答过程
char c = '\\41' ; \/* 单引号,同志*\/ printf("%d",c); \/*逗号,同志*\/ 输出33.c中的字符,能用'a'这种形式表示当然好,不过,很多不能;更一般的表示 '\\ooo' ,o为8进制数字,或是 '\\xhh',x打头,h是16进制数字;ooo或是hh的数值,是字符对应的ASCII码;'\\41'就是4*8+...

相似回答