数据结构 二叉树 遍历-树的括号表示法怎么写

问题描述

树的括号表示法怎么写
#include
#include
#include
using namespace std;
struct treenode
{
char data;
treenode firstchild;
treenode *nextsibling;
};
treenode * creat_tree(char
&a)
{ if((*a)=='')
{
a++;
}
if((*a)=='')
return NULL;
if((*a)==')')
{
a++;
return NULL;
}
if((*a)=='(')
{
a++;
}
treenode t=new treenode();
t->data=
(a++);
t->firstchild=creat_tree(a);
t->nextsibling=creat_tree(a);
return t;
}
void show_tree(treenode *t)
{ //cout<<""123"";
if(t==NULL)
return;
cout<data;
for(treenode *p=t->firstchild;p!=NULL;p=p->nextsibling)
{
show_tree(p);
}
}
int main()
{ //char ch[100];
char *a;//[100];
gets(a);
// puts(a);
treenode *t=creat_tree(a);
show_tree(t);
}

我写了一个,但又明显错误,希望大神能帮我改进。。

解决方案

 #include<stdio.h>#include<stdlib.h>#include<memory.h>typedef struct BiTNode {    char data;    struct BiTNode *lchild;    struct BiTNode *rchild; } *BiTree;BiTree CreateBiTree(BiTree T){    char ch;    scanf(""%c""&ch);    if (ch=='#'){         return NULL;     }else {        T = (BiTree)malloc(sizeof(struct BiTNode)) ;             T->data = ch;        T->lchild=CreateBiTree(T->lchild);           T->rchild=CreateBiTree(T->rchild);            return T;    }}void PreOrder(BiTree &T){    if(T){                              printf(""%c ""T->data);          PreOrder(T->lchild);           PreOrder(T->rchild);        }}void InOrder(BiTree &T){    if(T){                             InOrder(T->lchild);         printf(""%c ""T->data);          InOrder(T->rchild);     }}void PostOrder(BiTree &T){    if(T){                             PostOrder(T->lchild);        PostOrder(T->rchild);            printf(""%c ""T->data);    }}void ShowBiTree(BiTree  &bt){    if (bt!=NULL){        printf(""%c""bt->data);        if (bt->rchild!=NULL||bt->lchild!=NULL){            printf(""("");            ShowBiTree(bt->lchild);            if (bt->rchild!=NULL){                printf("");            }            ShowBiTree(bt->rchild);            printf("")"");        }    }}int main(){    printf(""请依次输入字符:
"");    BiTree T;    T = CreateBiTree(T);    printf(""先序遍历:
"");    PreOrder(T);    printf(""
中序遍历:
"");    InOrder(T);    printf(""
后序遍历:
"");    PostOrder(T);    printf(""
用括号表示法输出二叉树:
"");    ShowBiTree(T);    printf(""
"");    system(""pause"");    return 0;}

解决方案二:
树的括号表示法
树的括号表示法
树的邻接表表示法

时间: 2024-10-30 15:40:04

数据结构 二叉树 遍历-树的括号表示法怎么写的相关文章

数据结构 二叉树-我写的树的括号表示法哪错了,怎么改,求大神解答

问题描述 我写的树的括号表示法哪错了,怎么改,求大神解答 #include #include #include using namespace std; struct treenode { char data; treenode *firstchild; treenode *nextsibling; }; treenode * creat_tree(char*&a) { if((*a)==',') { a++; } if((*a)=='') return NULL; if((*a)==')')

@数据结构大神:递归实现二叉树遍历,38行为什么错?

问题描述 @数据结构大神:递归实现二叉树遍历,38行为什么错? # include<stdio.h> # include<stdlib.h> # include<malloc.h> # define Max_Size 3 typedef struct Node{ int data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; int x,k=0; void CreateBiTree(BiTree

数据结构实践项目——树和二叉树(1)

本文针对[数据结构基础系列(6):树和二叉树]第1-6, 8-10课时 1 树结构导学 2 树的基本概念 3 树的基本术语 4 树的性质 5 树的存储结构 6 二叉树概念和性质 8 二叉树的存储结构 9 二叉树的基本运算及其实现 10 二叉树的遍历 [项目1 - 二叉树算法库] 定义二叉树的链式存储结构,实现其基本运算,并完成测试. 要求: 1.头文件btree.h中定义数据结构并声明用于完成基本运算的函数.对应基本运算的函数包括: void CreateBTNode(BTNode *&b,ch

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

实现二叉树以及二叉树遍历数据结构

本文讲的是实现二叉树以及二叉树遍历数据结构, Swift 算法俱乐部 是一个致力于使用 Swift 来实现数据结构和算法的一个开源项目. 每个月,我和 Chris Pilcher 会在俱乐部网站上开建一个教程,来实现一个炫酷的数据结构或者算法.如果你想要去学习更多关于算法和数据结构的知识,请跟随我们的脚步吧. 在这个教程里面,你将学习到关于二叉树和二叉搜索树的知识.二叉树的实现首先是由 Matthijs Hollemans 实现的,而二叉搜索树是由 Nico Ameghino 实现的. 提示: 

C++中的树、二叉树、二叉树遍历、二叉树前序、中序、后序遍历相互求法

本博文来总结下树.二叉树以及二叉树前序.中序.后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明. 1.什么是树?什么是二叉树? 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合. 二叉树是指结点的度不超过2的有序树. (结点的度:树中的一个结点拥有的子树数目.) 2.二叉树的前序.中序.后序遍历的特性  二叉树前序遍历特性:   (1).访问根节点  (2).前序遍

数据结构例程——二叉树遍历的非递归算法

本文是数据结构基础系列(6):树和二叉树中第11课时二叉树遍历非递归算法的例程. [二叉树遍历的非递归算法] 实现二叉树的先序.中序.后序遍历的非递归算法,并对用"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"创建的二叉树进行测试. 请利用二叉树算法库. [参考解答](btreee.h见算法库) #include <stdio.h> #include "btree.h" void PreOrder1(BTNode *b) {

数据结构例程——二叉树遍历的递归算法

本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程. [二叉树遍历的递归算法] 实现二叉树的先序.中序.后序遍历的递归算法,并对用"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"创建的二叉树进行测试. 请利用二叉树算法库. [参考解答](btreee.h见算法库) #include <stdio.h> #include "btree.h" void PreOrder(BTNode *b) //先序遍历的递

数据结构例程——用二叉树遍历思想解决问题

本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程. [利用二叉树遍历思想解决问题](请利用二叉树算法库) 假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测试: (1)计算二叉树节点个数: (2)输出所有叶子节点: (3)求二叉树b的叶子节点个数 (4)设计一个算法Level(b,x,h),返回二叉链b中data值为x的节点的层数. (5)判断二叉树是否相似(关于二叉树t1和t2相似的判断:①t1和t2都是空的二叉树,相似:②t1和t2之一为空,另一不为空