#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct BTNode BTNode;
struct BTNode{
int ch;
BTNode * left;
BTNode * right;
};
// 创建一个二叉树 先序输入 0表示NULL
BTNode * creatBTNode(){
BTNode * p;
int ch;
cin>>ch;
if(ch ==0){
p=NULL;
}
else{
p=(BTNode *)malloc(sizeof(BTNode));
p->ch=ch;
p->left=creatBTNode();
p->right=creatBTNode();
}
return p;
}
//*****************先序遍历************
void preOrderTraverse(BTNode * node){
if(node){
cout<<node->ch<<' ';
preOrderTraverse(node->left);
preOrderTraverse(node->right);
}
}
//******************中序遍历**********
void inOrderTraverse(BTNode * node){
if(node){
inOrderTraverse(node->left);
cout<<node->ch<<' ';
inOrderTraverse(node->right);
}
}
//*****************后序遍历输出*******
void lastOrderTraverse(BTNode * node){
if(node){
lastOrderTraverse(node->left);
lastOrderTraverse(node->right);
cout<<node->ch<<' ';
}
}
//****************二叉树节点数目******
int NodeNum(BTNode * node){
if(node==NULL){
return 0;
}
else{
return 1+NodeNum(node->left)+NodeNum(node->right);
}
}
//*************二叉树深度*************
int DepthOfTree(BTNode * node){
if(node){
return DepthOfTree(node->left)>DepthOfTree(node->right)?DepthOfTree(node->left)+1:DepthOfTree(node->right)+1;
}
if(node==NULL){
return 0;
}
}
//**************二叉树叶子节点数*******
int leafNum(BTNode * node){
if(!node){
return 0;
}
else if(node->left==NULL&&node->right==NULL){
return 1;
}
else{
return (leafNum(node->left)+leafNum(node->right));
}
}
int main(){
BTNode * bttree=creatBTNode();
cout<<"先序遍历输出:"<<endl;
preOrderTraverse(bttree);
cout<<"\n中序遍历输出:"<<endl;
inOrderTraverse(bttree);
cout<<"\n后序遍历输出:"<<endl;
lastOrderTraverse(bttree);
cout<<"\n二叉树节点数目:"<<endl;
cout<<NodeNum(bttree)<<endl;
cout<<"二叉树深度"<<endl;
cout<<DepthOfTree(bttree)<<endl;
cout<<"叶子节点数"<<endl;
cout<<leafNum(bttree)<<endl;
return 0;
}
原文:http://blog.csdn.net/ricardo_he/article/details/41119709