C++:1.设计算法求二叉树的结点个数2.设计算法按前序次序打印二叉树中的叶子结点3.设计算法求二叉树的深度

论坛 期权论坛 期权     
高涵曦   2018-4-26 14:06   11706   3
C++程序设计
1.设计算法求二叉树的结点个数
2.设计算法按前序次序打印二叉树中的叶子结点
3.设计算法求二叉树的深度
分享到 :
0 人收藏

3 个回复

倒序浏览
2#
krnvta  1级新秀 | 2018-4-30 01:48:44
同学,你们老师和我们老师留的作业是一模一样的阿,我有现成的做好了的程序,调试成功。这个程序的难点就在于这种很别扭的输入形式,所以我为它设计了一个结构体形式存放输入内容,再将它转化成了线性结构。

#include
#include

struct inform                   /*建立输入信息结构体inform*/
{   char data;

    int  l;

    int  r;

    int  signl;                 /*作为标记的signl,signr*/

int  signr;
};

struct leafnode                 /*建立叶子节点结构体*/
{
    char leaf;

leafnode*  lchild;

leafnode*  rchild;

};

void print(inform* ps, int n);

void judge ( inform* ps );

leafnode*  creatree();          /*声明二叉树的建立函数*/

void preorder (leafnode* T);    /*声明先序遍历函数*/

void inorder (leafnode* T);      /*声明中序遍历函数*/

void postorder (leafnode* T);    /*声明后序遍历函数*/

char a[100];

int  k=1;
int  s=0;

inform *p;

void main()
{
/*-------------------------------按格式输入信息-----------------------------------*/

int n;

    cout(p+i)->l>>(p+i)->r;
  if((p+i)->l != -1)  (p+i)->signl=1;  /*用signl signr 的0,1标示输入的信息中是否有左或右孩子*/
  else  (p+i)->signl= 0;
  if((p+i)->r !=-1)   (p+i)->signr=1;
  else  (p+i)->signr= 0;
}

/*--------------------------------------------------------------------------------------------*/
    a[0]= p->data;

    judge ( p1 );                   /*用递归算法将输入数据信息转为线性字符串*/

cout
3#
贼寇在何方  2级吧友 | 2018-4-30 01:48:45
// 头文件什么的我就不写了
// 结点的定义
typedef struct node
{
int value;
struct node *lchild;
struct node *rchild;
}Node, *Tree;

// 1.设计算法求二叉树的结点个数
void GetTreeNodeCount( Tree* t, int& count )
{
    if( t != NULL )
    {
        count++;
        GetTreeNodeCount( t->lchild, count );
        GetTreeNodeCount( t->rchild, count );
    }
}
int GetTreeNodeCount( Tree t )
{
    int count = 0;
    GetTreeNodeCount( t, count );
    return count;
}

// 2.设计算法按前序次序打印二叉树中的叶子结点
void PrintLeapNode( Tree t )
{
    if( t != NULL )
    {
        PrintLeapNode( t->lchild );
        PrintLeapNode( t->rchild );
        if( t->lchild == NULL && t->rchild == NULL )
            printf( "%d", t->value );
    }
}

// 3.设计算法求二叉树的深度
void GetTreeDeep( Tree t, int i, int& deep )
{
    if( t != NULL )
    {
        GetTreeDeep( t->lchild, i+1, deep );
        GetTreeDeep( t->rchild, i+1, deep );
    }
    else
    {
        if( i > deep )
            deep = i;
    }
}
int GetTreeDeep( Tree t )
{
    int deep = 0;
    GetTreeDeep( t, 0, deep );
    return deep;
}
4#
蓝色污点  3级会员 | 2018-4-30 01:48:46
我给你的的类吧

#include
#include
#include
#include
using namespace std;

#include "Node.h"

template

class BTree
{
public:
char Leaf[50]; //记录叶结点
   BTree(); //构造函数

   Node* createBTree();//按先序遍历序列建立二叉树

   void PreOrder(Node* r); //先序遍历的递归算法
   void InOrder(Node* r);  //中序遍历的递归算法
   void PostOrder(Node* r);  //后序遍历的递归算法
   int GetSum();       //求节点数
   int GetLeaves();  //求叶结点数
   int GetDeep();        //求数的深度
   void Destroy(Node* r);
   Node* getRoot();
   void Print(Node* r,int level);

private:
   Node* root;
   int Sum;
   int Deep;
   int Leaves;

};

template
BTree::BTree()
{
   root = NULL;
   Sum=0;
   Deep=0;
   Leaves=0;
}

template
Node* BTree::getRoot()
{
   return root;
}

//求二叉树的高度
template
int BTree::GetDeep()
{
return Deep;
}
//求二叉树的结点数
template
int BTree::GetSum()
{
return Sum;
}
//求二叉树的叶结点数
template
int BTree::GetLeaves()
{
return Leaves;
}
//二叉树先序遍历 递归算法
template
void BTree::PreOrder(Node* r)
{
if(r!=NULL)
{
   cout data lChild);
   PreOrder(r->rChild);
}
}

//二叉树中序遍历 递归算法
template
void BTree::InOrder(Node* r)
{
   if(r)
{

   InOrder(r->lChild);
   cout data rChild);
}

}

//二叉树后序遍历 递归算法
template
void BTree::PostOrder(Node* r)
{
    if(r!=NULL)
{

   PostOrder(r->lChild);
   PostOrder(r->rChild);
   cout data Deep)
  Deep=level;
    //二叉树r第level层结点数据域值的横向显示
    if(r != NULL)
    {
        //二叉树r->rChild第level+1层结点数据域值的横向显示
  Print(r->rChild , level+1);

        if(level != 0)
        { //走过6*(level-1)个空格
   for(int i = 0; i < 6*(level); i++)
                coutlChild);
       if(r->rChild != NULL)
           Destroy(r->rChild);
       cout data >ch;
if(ch==&#39;#&#39;)
  return NULL;
else
{
  int t=++Sum;
   r = new Node(ch);
   r->lChild=createBTree();
   r->rChild=createBTree();
   if(Sum==t)
   {
    Leaf[Leaves++]=ch;
   }

}
root=r;
return r;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP