好久没有写C++,重新拾起来还是有很多别扭的地方。。。 技术就像浩瀚天空无边无际,我们都在探讨的路上。今天手写一个简单C++二叉树的实现,都是一边看,一边回忆。然后再动手实现,过程中有遇到这些问题。
1.我们实现之前首先需要考虑使用链表还是顺序表实现。(这里采用链表实现,顺序表实现暂时没有~)
2.ADT怎么设计,需要设计哪些对外API供外界调用
3.C++的基础语法,哎呀~ 好多忘记了~
4.动手吧~
首先,把二叉树生成放在C++的构造方法里面实现,代码如下:
// 构造二叉树,由str串创建二叉树
BinTree(char *str){
BTNode *st[MaxSize], *p=NULL;
int top=-1,k,j=0;
char ch;
root = NULL;
ch = str[j];
while (ch!='\0') {
switch (ch) {
case '(':
top++;
st[top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default:
p = (BTNode *)malloc(sizeof(BTNode));
p->data = ch;
p->lchirld=p->rchirld=NULL;
if (root==NULL) {
root = p;
}else{
switch (k) {
case 1:
st[top]->lchirld=p;
break;
case 2:
st[top]->rchirld=p;
break;
}
}
break;
}
j++;
ch=str[j];
}
}
展示结点:
BTNode *LchirldNode(BTNode *p){
return p->lchirld;
}
BTNode *RchirldNode(BTNode *p){
return p->rchirld;
}
// 获取深度
int BTNodeDepth(BTNode *p){
int ldepth,rdepth;
if (p==NULL) {
return 0;
}else{
ldepth = BTNodeDepth(p->lchirld);
rdepth = BTNodeDepth(p->rchirld);
return (ldepth>rdepth?(ldepth+1):(rdepth+1));
}
}
最后在析构方法中删除结点:
void DelTree(BTNode *p){
if (p!=NULL) {
DelTree(p->lchirld);
DelTree(p->rchirld);
free(p);
}
}
~BinTree(){
if (root!=NULL) {
DelTree(root);
}
一个简单的二叉树就实现了,啊,太菜了~ 还请大牛多多指点~
网友评论