销毁二叉树(递归和非递归)
//递归的方式
void Destroy(BiTree *root) {
//销毁操作必须按照后续遍历的顺序
if (!(*root))
return;
else {
Destroy(&(*root)->lchild);
Destroy(&(*root)->rchild);
free(*root);
*root = NULL;
}
}
头文件
#include "Queue.h"
#include "Stack.h"
#include "define.h"
#ifndef __BINARYTREE_H
#define __BINARYTREE_H
typedef char BitreeElemType;
typedef struct __BiNode {
BitreeElemType data;
__BiNode *lchild, *rchild;
} BiNode, *BiTree;
void Creat_BiTree_Pre(BiTree *T);
void InOrder(BiTree T);
void InOrder_unrec(BiTree T);
void PreOrder(BiTree T);
void PostOrder(BiTree T);
void LevelOrer(BiTree T);
void Copy(BiTree *Tnew, const BiTree T);
int Depth(BiTree T);
int Nodes(BiTree T);
void Destroy_unrec(BiTree *root);
void Destroy(BiTree *root);
#endif
线索二叉树 Threaded Binary Tree(了解即可)
前驱、后继可以以前、中、后的一个序遍历为准
数据类型定义
typedef struct BiThrNode {
int data;
int ltag, rtag; //为了区分左右孩子指向为空还是前驱或后继,新增ltag,rtag
BiThrNode * lchidl, *rchild;
} *BiThrTree;
为了区分指针指向的是前驱后继还是左右孩子,需加上ltag/rtag两个标志域