二叉树的构造



//本文档主要实现通过正确的括号表示法表示的二叉树字符串创建二叉树
#include<iostream>
using namespace std;

#define LEN  1000

//定义二叉树节点的数据结构

struct BTNode
{
 char data;
 BTNode*left;
 BTNode*right;
};

//创建二叉树

void CreateBTNode(BTNode* &root,char*str);


//输出二叉树字符串的括号表示方法
void PrintBTNode(BTNode*root);

int main()
{
 char str[LEN];

 BTNode*root=NULL;
 printf("请输入正确的二叉树括号表示法的字符串");
 scanf("%s",str);
 CreateBTNode(root,str);
 PrintBTNode(root);
 return 0;
}

void CreateBTNode(BTNode* &root,char *str)
{
 if(*str=='\0')
 {
  root=NULL;
  return;
 }
 int flag=0,top=-1;
 BTNode* Tank[LEN],*temp;
 while((*str)!='\0')
 {
  switch(*str)
  {
  case '(':
   Tank[++top]=temp;
   flag=1;
   break;
  case ',':
   flag=2;
   break;
  case ')':
   top--;
   break;
  default:
   if(!root)
   {
    root=new BTNode;
    root->data=*str;
    root->left=NULL;
    root->right=NULL;
    temp=root;
   }
   else
   {
    temp=new BTNode;
    temp->data=*str;
    temp->left=NULL;
    temp->right=NULL;
    if(flag==1)
    {
     Tank[top]->left=temp;
    }
    else
    {
     Tank[top]->right=temp;
    }
   }
  }
  str++;
 }
}

void PrintBTNode(BTNode*root)
{
 if(!root)
  return;
 printf("%c",root->data);
 if(!root->left && !root->right)
  return;
 printf("(");
 PrintBTNode(root->left);
 printf(",");
 PrintBTNode(root->right);
 printf(")");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值