我在树的基础里面已经简单介绍了二叉树,接下来我们直接来看二叉树的创建。
应用:
我是用递归前序的方法来实现二叉树的创建的。并用递归前序的方法来遍历的。
typedef struct node
{
struct node *lchild;
struct node *rchild;
char data;
}BiTreeNode, *BiTree;//记着定义类型和指针类型
void createBiTree(BiTree &T)//前序遍历法创建二叉树
{
char c;
cin>>c;
if('#'==c)
{
T = NULL;
}
else
{
T= new BiTreeNode ;
T->data = c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
void preTraverse(BiTree &T)//前序遍历来遍历二叉树
{
if(T)
{
cout<<T->data<<" ";
preTraverse(T->lchild);
preTraverse(T->rchild);
}
}
int count_Leaf(BiTree &T)//计算叶子节点前序遍历法
{
if(T == NULL)
{
return 0;
}
else if(T->lchild==NULL&&T->rchild==NULL)
{
return 1;
}
else
{
return count_Leaf(T->lchild)+count_Leaf(T->rchild);
}
}
int depth_Tree(BiTree &T)//遍历二叉树求树的高度
{
int L_depth = 0;
int R_depth = 0;
int depth = 0;
if(T == NULL)
{
return depth ;
}
L_depth = depth_Tree(T->lchild);
R_depth = depth_Tree(T->rchild);
depth = ((L_depth>R_depth)?(L_depth+1):(R_depth+1));
return depth;
}
int main()
{
BiTree T;
createBiTree(T);
cout<<"二叉树创建完成!"<<endl;
cout<<"前序遍历二叉树:"<<endl;
preTraverse(T);
cout<<endl;
printf("叶子节点为:%d\n",count_Leaf(T));
printf("树的深度为:%d\n",depth_Tree(T));
}
欢迎各位指出不足之处
831

被折叠的 条评论
为什么被折叠?



