transform方法流程:
1、构造两个队列,普通树队列和二叉树队列。
2、将二叉树的根入队列,构造普通树的根顶点并入对应队列。
3、循环判断二叉树队列不为空。
4、从两个队列中分别取出一个元素,分别为bnode,node。
5、当bnode没有左孩子时,不考虑这种情况。因为此时的node没有孩子。
6、当bnode有左孩子时,构造普通树节点,数据为左孩子的数据。将该普通节点和左孩子分别入对应队列。同时让node的第一个孩子指针指向该树节点。(对同一个点而言二叉树的左孩子为树的第一个孩子)
7、从这个普通节点开始,一直寻找它的右孩子。每找到一个,对应构造一个二叉树节点。并将这些节点依次赋给node的孩子指针。同时将这些构造节点和二叉树的右孩子节点入队列。
#include <stdio.h>
#include <stdlib.h>
#define N 3 //定义每个节点的最大孩子数
#define M 9 //定义树中节点的个数
struct TreeNode
{
char data;
struct TreeNode *childs[N];
};
typedef struct TreeNode TreeNode; //定义类型
struct BTreeNode
{
char data;
struct BTreeNode *lchild, *rchild;
};
typedef struct BTreeNode BTreeNode;
/*------------------普通树的队列开始--------------------*/
struct QueueTree
{
int i, j;
TreeNode **queue;
};
typedef struct QueueTree QueueTree;
QueueTree * initQueueTree()
{
//分配一个队列空间
QueueTree *tree = (QueueTree *)malloc(sizeof(QueueTree));
//分配M个树节点指针空间
tree->queue = (TreeNode **)malloc(sizeof(TreeNode *)*M);
tree->i = 0;
tree->j = 0;
return tree;
};
void freeQueueTree(QueueTree *tree) //释放分配空间
{
free(tree->queue);
free(tree);
}
void addQueueTree(QueueTree *tree, TreeNode *node) //加入队列
{
if(tree->j == M) //队列已满
return;
tree->queue</