近期学习二叉树,注重递归的使用。
//20191003155 计算机类1902 李晓宁 5.24 #include<iostream> #include<string.h> using namespace std; static int i=0;//i为全局变量 typedef struct BiNode{ //二叉链表定义 char data; struct BiNode *lchild,*rchild; }BiTNode,*BiTree; //用算法5.3 先序遍历的顺序建立二叉链表 void CreateBiTree(BiTree &T,char a[]){ //按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T char ch; ch=a[i++]; {if(ch==‘#‘) T=NULL; //递归结束,建空树 else{ T=new BiTNode; T->data=ch; //生成根结点 CreateBiTree(T->lchild,a); //递归创建左子树 CreateBiTree(T->rchild,a); //递归创建右子树 } } } //CreateBiTree void InOrderTraverse(BiTree T){ //中序遍历二叉树T的递归算法 if(T){ cout << T->data<<" "; InOrderTraverse(T->lchild); InOrderTraverse(T->rchild); } } int CountLeaves(BiTree T) { if(T==NULL) return 0; else if(T->lchild==NULL&&T->rchild==NULL) return 1; else return CountLeaves(T->lchild)+CountLeaves(T->rchild); } int main(){ char a[100]; while(cin>>a) { BiTree tree; i=0; CreateBiTree(tree,a); InOrderTraverse(tree); cout<<endl; cout<<CountLeaves(tree)<<endl; return 0; } }
原文:https://www.cnblogs.com/sanens/p/12984819.html