主要内容 #
- 建立一棵二叉树
- 删除一棵二叉树
1. 建立一棵二叉树 #
定义二叉树的节点:
#include<iostream>
#include<cstdlib>
#include<cstdio>
typedef struct node;
typedef node *tree;
struct node{
char data;
tree lchild, rchild;
};
采用递归的方式建立一棵二叉树:
void pre_crt(tree &bt){
char ch;
ch = getchar(); //bt 为指向根节点的指针,'¥'表示为空
if(ch != '¥'){
bt = new node; //建立根节点
bt -> data = ch;
pre_crt(bt -> lchild); //建立左子树
pre_crt(bt -> rchild); //建立右子树
}
else bt = NULL; //是一棵空树
}
值得注意的是,这种建立树的方式,需要按照前序遍历的顺序输入,并且在遇到左子树或者右子树为空时,需要输入’¥’字符来终止递归,如要产生下面的一棵二叉树,则输入的顺序为:F, B, A,¥,¥, D, C, ¥,¥,E,¥,¥,G,¥,I, H,¥,¥,¥.

2. 删除一棵二叉树 #
删除一棵二叉树相对简单,也是采用递归的算法,代码如下:
void dis(tree &bt){
if(bt)
dis(bt -> lchild); //删除左子树
dis(bt -> rchild); //删除右子树
delete bt; //释放当前节点
}