赞
踩
下列函数中使用的二叉树的节点为
typedef struct Node{ //二叉树节点的定义
char data;
Node *lchild;
Node *rchild;
}Node,*Tree;
void createTreeByXianXu(Tree &T){ //输入先序扩展序列创建二叉树,"#"代表空树
char ch;
scanf("%c",&ch);
if(ch == '#') T = NULL;
else{
if(!(T= (Node*) malloc(sizeof(Node))))
return;
T->data = ch;
createTreeByXianXu(T->lchild);
createTreeByXianXu(T->rchild);
}
}
Node* createTree(char *pre,char *mid,int n){ //给定二叉树的先序序列和中序序列,建立二叉树 Node* s = (Node*)malloc(sizeof(Node)); s->data = *pre; s->lchild = s->rchild = NULL; if(n == 1){ return s; } int i = 0; for(;i < n;i++){ if(mid[i] == pre[0]) break; } if(i) s->lchild = createTree(pre+1,mid,i); if(n-i-1) s->rchild = createTree(pre+i+1,mid+i+1,n-i-1); return s; }
这里代码借鉴https://blog.csdn.net/weixin_42545675/article/details/103337658
函数的调用示例为:
Tree * root = createBTree(层级序列、中序序列、0、length-1、0、length-1);
Node* createBTree(char level[], char in[], int l1, int r1, int l2, int r2){ //根据层级序列和中序序列建立二叉树 if (l2 > r2) return NULL; else{ Node* bt = (Node*)malloc(sizeof(Node)); int i, j;//分别指向level和in中数组的元素 int flag = 0; //寻找根结点,若level中第一个与in中元素匹配的即为根结点 for (i = l1; i <= r1; ++i){ for (j = l2; j <= r2; ++j){ if (level[i] == in[j]){ flag = 1; break; } } if (flag == 1) break; } bt->data = level[i]; bt->lchild = createBTree(level, in, l1 + 1, r1, l2, j - 1); bt->rchild = createBTree(level, in, l1 + 1, r1, j + 1, r2); return bt; } }
由于以上建立方式都是使用malloc函数创建节点,因此为防止内存泄漏,需要使用free函数释放二叉树的内存空间,建议在主函数最后调用destory函数释放内存空间。
void destory(Tree T){ //释放二叉树的内存空间
if(!T)
return;
destory(T->lchild);
destory(T->rchild);
free(T);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。