#include<iostream> using namespace std; typedef struct BiTreeNode{ char data; BiTreeNode *lChild; BiTreeNode *rChild; }BiTreeNode; int leafCount; //递归建立二叉树 void InitialBiTree(BiTreeNode *&node) { char data; cout<<"请输入数据,输入#结束"<<endl; cin>>data; if(data!='#') { node=(BiTreeNode*)malloc(sizeof(BiTreeNode)); if(node==NULL)return; node->data=data; InitialBiTree(node->lChild); InitialBiTree(node->rChild); } else { node=NULL; } } //先序遍历 void TransFirstBiTree(BiTreeNode *&root)//注意使用*&root,^-^搞得有点郁闷反正就是这样root才可以保住 { if(root==NULL)return; else { cout<<root->data<<" "; TransFirstBiTree(root->lChild); TransFirstBiTree(root->rChild); } } //叶结点基数 void CountLeafNode(BiTreeNode *&root) { if(root!=NULL) { if(root->lChild==NULL&&root->rChild==NULL) leafCount++; CountLeafNode(root->lChild); CountLeafNode(root->rChild); } else { return ; } } //递归求二叉树的深度,max=hl>hr?hl:hr;max+=1;(递归定义) int PostTreeDepth(BiTreeNode *&root) { int hl,hr,max; if(root!=NULL) { hl=PostTreeDepth(root->lChild); hr=PostTreeDepth(root->rChild); max=hl>hr?hl:hr; return (max+1); } else return 0; } int main() { char cmd; do{ leafCount=0; BiTreeNode *root=NULL; InitialBiTree(root); cout<<"先序遍历\n"; TransFirstBiTree(root); cout<<"\n"; cout<<"\n";CountLeafNode(root); cout<<"叶结点数目为\n"; cout<<leafCount<<endl; cout<<"树的深度为\n"; cout<<PostTreeDepth(root)<<endl; cout<<"继续吗?y or n\n"; cin>>cmd; }while(cmd=='y'); return 0; }
递归求二叉树的叶子结点数及深度
最新推荐文章于 2021-12-04 13:19:53 发布