#include"Bintree.h" /*******************************************/ /* 递归法将二叉树的左右子树互换 */ /*******************************************/ void Exchange1(Bintree t) { Bintree temp; if(t) { Exchange1(t->lchild); Exchange1(t->rchild); temp=t->lchild; t->lchild=t->rchild; t->rchild=temp; } } /*******************************************/ /* 非递归法将二叉树的左右子树互换 */ /*******************************************/ void Exchange2(Bintree t) { Bintree temp; stack s; s.top=0; while(t||s.top) { if(t) { s.data[s.top++]=t; temp=t->lchild; t->lchild=t->rchild; t->rchild=temp; t=t->lchild; } else { t=s.data[--s.top]->rchild; } } } int main() { Bintree t; Creat_Bintree(&t); Exchange2(t); Inorder2(t); return 0; } #include"Bintree.h" /*******************************************/ /* 递归法求叶子结点个数 */ /*******************************************/ int Leaves_Num1(Bintree t) { if(t) { if(t->lchild==NULL&&t->rchild==NULL) { return 1; } return Leaves_Num1(t->lchild)+Leaves_Num1(t->rchild); } return 0; } /*******************************************/ /* 非递归法求叶子结点个数 */ /*******************************************/ int Leaves_Num2(Bintree t) { int count=0; stack s; s.top=0; while(t||s.top>0) { if(t) { s.data[s.top++]=t; if(t->lchild==NULL&&t->rchild==NULL) { count++; } t=t->lchild; } else { t=s.data[--s.top]->rchild; } } return count; } int main() { int count=0; Bintree t; Creat_Bintree(&t); count=Leaves_Num2(t); printf("该二叉树的叶子结点数为:%d/n",count); return 0; }  
2/2 首页 上一页 1 2 |