最近在学数据结构,被一个递归算二叉树结点问题卡住了(已解决)
本帖最后由 wushaominkk 于 2020-3-25 09:14 编辑修改前和修改后的结果不一致,但不知道什么原因,有大佬能帮忙看下吗?修改部分的代码在图片里,下面代码是正确代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
struct BiTNode{
char data;
BiTNode *lchild;
BiTNode *rchild;
};
void creat(BiTNode *&T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T = new BiTNode;
T->data = ch;
creat(T->lchild);
creat(T->rchild);
}
}
int nodeCount(BiTNode *T)
{
if(T==NULL) return 0;
return nodeCount(T->lchild)+nodeCount(T->rchild)+1;
}
int leafCount(BiTNode *T)
{
if(T==NULL) return 0;
if(T->lchild==NULL && T->rchild==NULL) return 1;
return leafCount(T->lchild)+leafCount(T->rchild);
}
int oneDegree(BiTNode *T)
{
if(T==NULL) return 0;
if((T->lchild==NULL && T->rchild!=NULL)||
(T->lchild!=NULL && T->rchild==NULL)) return 1;
return oneDegree(T->lchild)+oneDegree(T->rchild);
}
voidpreOrder(BiTNode *T)
{
if(T){
cout << T->data;
preOrder(T->lchild);
preOrder(T->rchild);
}
}
int main()
{
BiTNode *T;
creat(T);
preOrder(T);
cout << endl;
cout << "结点数:" << nodeCount(T) << endl;
cout << "叶子数:" << leafCount(T) << endl;
cout << "度为1结点数:" << oneDegree(T) << endl;
return 0;
} 不懂,在我心里,你们都是大神。 KamiMao 发表于 2020-3-24 14:59
回归到代码本身, if(T==NULL) return 0;
return nodeCount(T->lchild)+no ...
嗯 我后来也发现了 修改后的代码只算左子树没有算右子树 最后面那句根本不会执行 KamiMao 发表于 2020-3-24 14:55
if(判断){
return ...
}else if(判断){
嗯,有时候为了涂个简洁方便就简化了很多代码 又不注释乱看不懂 我最近也在学数据结构,那个kmp算法有点懵,楼主传授一下经验?? 我不是药神 发表于 2020-3-24 16:26
我最近也在学数据结构,那个kmp算法有点懵,楼主传授一下经验??
kmp算法我还是第一次听到,我是初学者,才刚学到二叉树
页:
[1]