前言
王道二叉树习题9,17
正文
题目一:
计算一颗二叉树T中所有双分支结点数
f(T)=0 若T=NULL
f(T)=f(T->lchild)+f(T->rchild)+1 若T为双分支结点
f(T)=f(T->lchild)+f(T->rchild) 其他情况
如果一个根结点左右子树都不为NULL,进入第二种情况,再递归判断它的左右子树是否为双分支结点。否则进入第三种情况,直到结点为NULL返回0
代码初看起来递归很绕,因为左右两边都要遍历所以返回值是两个函数相加
递归
int DsonNode(BiTree T){
if(T==NULL)
return 0;
else if(T->lchild&&T->rchild )
return DsonNode(T->lchild)+DsonNode(T->rchild)+1;
else
return DsonNode(T->lchild)+DsonNode(T->rchild);
}
题目二:
判断两树是否相似
两个出口:
- p和q同时为NULL,则返回1
- p和q有一个为NULL另一个不为NULL,则返回0
四个判断:(以某结点为根)
- left=0,right=0,结果为0(左右子树均不相似)
- left=0,right=1,结果为0(左相似右不相似)
- left=1,right=0,结果为0(左不相似右相似)
- left=1,right=1,结果为1(左右子树均相似)
递归
int similar(BiTree p,BiTree q){
if(p==NULL&&q==NULL)
return 1;
else if(p==NULL||q=NULL)
return 0;
else{
left=similar(p->lchild,q->lchild);
right=similar(p->rchild,q->rchild);
}
if(left==1&&right==1)
return 1;
else
return 0;
}