许多人可能试图找到通用树的构造,但是搜索引擎只发现了二进制树。二进制搜索树,遍历二进制树和许多其他算法。
是的,的确如此,一般树不会在任何地方使用,旁路速度很慢,用例很小。
所以,我问了这个问题,现在我将解释如何构建树。 因此,理想情况下,一般形式的树的结构应存储三个变量:
struct Tnode { int key; struct Tnode *son; struct Tnode *brother; }; typedef struct Tnode Node;
声明一个指向顶部的指针:
Node *tree = NULL;
我们必须事先同意如何输入顶点,这不是二叉树,每个顶点可以有任何子代。
- + 2(或+ ssbb 2)-插入树中(对于一般树,路径由线指定,其中r是根,s是到长子的过渡,b是到兄弟的过渡);
我举一个例子:
+r 1 + 2 + 3 + 3 +s 5 +sb 6 +sb 7
结果,该树将被释放:
1 2 5 3 6 7 3
首先,创建一个添加顶点的函数,即为该顶点分配内存并传递指向该顶点的指针(最初与任何东西都不相关)。
Node *create_tree(int v) { Node *Tree = (Node *) malloc(sizeof(Node)); Tree->key = v;
您还必须创建一个处理路径字符串(+ bs ...)的函数。 每次我们从根开始遍历时,如果未创建遍历,则打印NULL(我们什么也不能做)。 如果没有峰值,那么我们必须创建它。 转到创建树函数并获得指向根的指针。
注意:Node **树通过结构,而不是副本。 与Node * tree声明不同,这使我们能够更改无法完成的操作。
通常,我们应该找到指向顶部的指针,我们需要在上面添加一个儿子:
Node* add_node(Node **tree, const char *a) { Node* t = *tree; int value; scanf("%d", &value); int i = 0; while (a[++i] != '\0') { if (a[i] == 'r') { *tree = create_tree(value);
这样我们就可以构建一棵树。
PS是我的第一篇文章,所以请不要严格判断