1.统计二叉树的叶节点个数
int LeafNode(BiTree T){
if (T==NULL){
return 0;
}
else if(T->lchild==NUll&&T->rchild==NUll){
return 1;
}
else{
return LeafNode(T->lchild)+LeafNode(T->rchild);
}
}
2.判别两树是否相等
利用递归实现,递归实现的条件有三个:
-
两颗树都为空,返回相等
-
只有一棵树为空,返回不等
-
根节点的数据域不等,返回不等
-
其余情况下判断相应的孩子结点是否相等
int Compare(BiTree T1,BiTree T2){
if(T1==NUll&&T2==NULL){
return 1;
}
else if(T1==NULL||T2==NULL){
return 0;
}
if(T1->data!=T2->data){
return 0;
}
left=right--;
leff= Compare(T1->lchild,T2->lchild);
right= Compare(T1->right,T2->rchild);
return left&&right;
}
3.交换二叉树每个节点的左孩子和右孩子
-
如果某节点的左右子树均为空,则返回
-
否则就交换该结点的左右孩子结点
void ChangeLR(BiTree &T){
if(T==NULL)return;
if(T->lchild==NULL&T->rchild==NULL){
return;
}
else{
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
ChangeLR(T->lchild);
ChangeLR(T->rchild);
}
4.设计二叉树的双序遍历算法
双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树
-
访问根节点
-
先序遍历左子树
-
访问根节点
-
先序遍历右子树
void DoubleTraverse(BiTree T){
if(T){
cout<<T->data;
DoubleTraverse(T->lchild);
cout<<T->data;
DoubleTraverse(T->rchild);
}
}