广义表创建二叉树

本文介绍了如何通过广义表来创建二叉树,重点在于利用广义表的结构递归构建二叉树。二叉树的创建遵循先序方式,通过栈来实现,同时提到了中序和后序创建方法。此外,还讨论了二叉树的凹入法输出,确保相同级别的节点等距输出,并给出了先序遍历的输出示例。
摘要由CSDN通过智能技术生成

二叉树的创建一般说来有三种创建方法。这里只介绍利用广义表创建二叉树。广义表创树的方法是首先是首先是根结点,接着是左括号,注意每个左括号有相应的右括号与其对应,表示儿子结点创建结束。然后是其儿子结点,每隔一个逗号就是另一个儿子的创建,然后其中每个儿子,又按上述方式递归创建自己的儿子结点。而二叉树的创建和树的创建完全一样,只是每个结点最多有两个儿子结点。例如a(b,c(d,e)),其中a表示根结点,b为其左儿子,c为其右儿子,b没有儿子结点,c的左儿子有d,右儿子为e。

那么具体在创建的过程中采用先序创建二叉树,这样就需要利用到栈,将父亲结点压栈,利用栈先进后出的特征先序创建二叉树,当然也可以用中序和后序法创建二叉树。这里利用数组模拟栈。然后是二叉树的凹入法输出二叉树,特点是:相同等级的结点等距离输出,儿子结点教其父亲结点要多输出4个距离。采用先序遍历的方法输出。

创建的代码如下:

#include <stdio.h>
#include <stdlib.h>
#define Max 100
//#define Low 0
//#ddfine High 1
typedef char type;
typedef enum symbol{Low=0,High=1};
typedef struct Bitree{
	type data;
	struct Bitree *left;
	struct Bitree *right;
}Bitree,*ptree;
ptree Creat_Bitree(char *ch){ //利用广义表创建二叉树
	ptree stack[Max];
	ptree p,q=NULL;
	int index=0;
	int top=-1;
    symbol trag;
	while(ch[inde
这里给出一个简单的例子,可以通过输入广义表来建立二叉树: ```c #include <stdio.h> #include <stdlib.h> typedef struct Node { char data; struct Node* left; struct Node* right; } Node; Node* createNode(char data) { Node* node = (Node*)malloc(sizeof(Node)); node->data = data; node->left = NULL; node->right = NULL; return node; } Node* createTree(char* str, int* index) { if (str[*index] == '\0') { return NULL; } Node* node = NULL; if (str[*index] != '(' && str[*index] != ')') { node = createNode(str[*index]); } (*index)++; if (str[*index] == '(') { (*index)++; node->left = createTree(str, index); } if (str[*index] == ')') { (*index)++; return node; } if (str[*index] == '(') { (*index)++; node->right = createTree(str, index); } return node; } void printTree(Node* root) { if (root == NULL) { return; } printf("%c", root->data); if (root->left || root->right) { printf("("); printTree(root->left); printf(","); printTree(root->right); printf(")"); } } int main() { char str[] = "A(B(C),D)"; int index = 0; Node* root = createTree(str, &index); printf("The binary tree is: "); printTree(root); printf("\n"); return 0; } ``` 在这个例子中,我们定义了一个 `Node` 结构体来表示二叉树的节点,其中包含了数据和左右子节点的指针。然后定义了一个 `createNode` 函数用于创建节点,一个 `createTree` 函数用于根据广义表创建二叉树,一个 `printTree` 函数用于输出二叉树。 在 `createTree` 函数中,我们首先判断当前字符是否为 `(` 或 `)`,如果不是,就创建一个节点,并让指针指向该节点。然后递归调用 `createTree` 函数构建它的左右子。最后返回该节点。 在 `main` 函数中,我们简单地输入了一个广义表,然后调用 `createTree` 函数创建二叉树,并调用 `printTree` 函数输出二叉树。输出结果为: ``` The binary tree is: A(B(C,),D) ``` 可以看到,我们成功地根据广义表创建了一个二叉树,并成功地输出了它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值