递归创建二叉树

1. 树的存储

typedef struct BiTNode
{
char data;
struct BiTNode lchild,rchild;
}BTNode,*BTree;

2 .树的创建

void CreateTree(BTree &T)
{
char ch;
cin>>ch;
if(ch==‘#‘)
{
T=NULL;
}
else
{
T=(BTree) new BTNode;
if(!T)
exit(-1);
T->data=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}

}

3.前序遍历

void PreOrder(BTree &T)
{
if(T)
{
cout<data;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}

4.中序遍历

void PreOrder(BTree &T)
{
if(T)
{
PreOrder(T->lchild);

  cout<data;
PreOrder(T->rchild);
}
}

5.后序遍历

void PostOrder(BTree &T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<data;
}
}

6. 完整代码

#include <stdlib.h>
#include
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode lchild,rchild;
}BTNode,*BTree;
void CreateTree(BTree &T)
{
char ch;
cin>>ch;
if(ch==‘#‘)
{
T=NULL;
}
else
{
T=(BTree) new BTNode;
if(!T)
exit(-1);
T->data=ch;
CreateTree(T->lchild);
CreateTree(T->rchild);
}
}
void PreOrder(BTree &T)
{
if(T)
{
cout<data;
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BTree &T)
{
if(T!=NULL)
{
InOrder(T->lchild);
cout<data;
InOrder(T->rchild);
}

void PostOrder(BTree &T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
cout<data;
}
}
int main()
{
BTree T;
cout<<"请输入树的节点:" ;
CreateTree(T);
cout<<"先序遍历:";
PreOrder(T) ;
cout<<endl;
cout<<"中序遍历:";
InOrder(T) ;
cout<<endl;
cout<<"后序遍历:";
PostOrder(T) ;
cout<<endl;
return 0;
}

7.输入样例

abd##e##cf###

8.运行截图

原文地址:https://www.cnblogs.com/singly/p/10797682.html

时间: 2024-10-09 01:42:45

递归创建二叉树的相关文章

递归创建二叉树遇到的一个bug

今天上午在(先序)递归创建二叉树时遇到了一个bug,以下是程序部分: (关于递归创建二叉树这位前辈讲的很清楚,http://blog.csdn.net/stpeace/article/details/8138303) 1 void PreTraverse(PBiNode T) 2 { 3 if(!T) 4 return; 5 printf("%c", T->data); 6 PreTraverse(T->leftch); 7 PreTraverse(T->rightc

非递归创建二叉树( C++队列 )

非递归按照 层序 创建二叉树,利用 队列(即可先进先出特点)存放已访问的结点元素的地址. 初始化:front=rear= -1: 每储存一个结点元素 rear+1 ,利用 rear%2==0 来使 front+1 回车表示结点输入完毕 1 // 结构体 2 struct Node { 3 char data; 4 Node * lchild; 5 Node * rchild; 6 }; 7 /* 类 class Tree中的私有构造方法 Node * Create() 8 注:该方法需要 以层序

二叉树的递归创建

1.树 (1).树形结构本身具有递归的性质(在其后的编程中体现的淋漓尽致)! 树是一种非常重要的非线性结构. (2).几个概念:结点的度,就是分支个数(孩子个数): 树的度,结点度中最大的(孩子最多的): 非叶子结点,度 > 0 (有孩子结点): 叶子结点,度为0的 (没有孩子结点): 树的高度,从1开始算: (3).为什么要学习二叉树? 原因:所有的树形结构(包括森林)都可以转化为二叉树.二叉树是树形结构的基础, 只有学好了二叉树才能学好其它的. 2.二叉树 (1).二叉树分左右,所以又叫做有

c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历

#include <iostream> #include <cstdio> #include <stdio.h> #include <string> #include <queue> #include <stack> using namespace std; class Node{ public : char data; struct Node *lchild,*rchild; }; class BiTree{ public: Nod

先序非递归建立二叉树

大二这么久了,第一个学期课程实在太少,而且全都不是CS的专业课,无奈,若是自己不勤奋一点,过了半年,用不到半年,就又变回小白了.所以自己最近也在重新巩固数据结构的知识.刚好看到二叉树这里,觉得二叉树应用广泛,复习的比较细致. 刚开始就是二叉树的建立了,大多数地方都是先序的递归创建,于是便想着试试非递归的代码,倒腾了个把小时,基本上弄出代码了,小女子水平有限,有错误的地方,望路过的大神不吝赐教~~不胜感激! 主要的思路是: 按照先序的顺序输入二叉树,若是遇到空子树,用字符‘#‘表示,例如 左图:A

创建二叉树 树的深度搜索 广度搜索

树的深度搜索 与树的前序遍历同理 根节点->左孩子->右孩子  树的广度搜索 与树的层次遍历同理 一层一层遍历内容 深度搜索 采用stack的适配器 先进后出原则  而广度搜索采用的queue适配器 先进先出原则 二者正好满足 搜索需求 简要代码如下: #include <iostream> #include <stack> #include <queue> #include <malloc.h> using namespace std; typ

数据结构上机 【创建二叉树,并采用先中后序遍历,输出树高,度数为分别为0 1 2 的结点个数】

#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<malloc.h> #define null 0 using namespace std; typedef struct node { int data;//节点 node *lchild,*rchild; }node,*Tree; typedef struct{ Tree to

非递归建立二叉树

前言 使用递归(Recursion)建立二叉树(Binary Tree)的非顺序存储结构(即二叉链表),可以简化算法编写的复杂程度,但是递归效率低,而且容易导致堆栈溢出,因而很有必要使用非递归算法. 引入 无论是单链表还是二叉树,创建时要解决问题就是关系的建立,即单链表中前驱节点与当前节点的关系和二叉树中父节点与子节点的关系. 首先,思考一下建立单链表的过程,为了使链表各个节点连接起来,在创建当前节点(q)的时候,需借助一个指针(p)指向前一个节点,然后p->next = q. 由此推广至二叉树

创建二叉树来实现指路问题

生活中我们经常会遇到这样的问题,对话如下.路人:“同学,请问湘大图书馆怎么走啊?” 学生:“前面路口左转,然后直走,第三个路口左转,之后再右转就到了.”这里就涉及到创建二叉树来解决此类问题的方法了. 指路法定位结点 从根节点开始: 结点1的位置: { NULL } 结点2的位置: { 左 } 结点3的位置: { 右 } 结点4的位置: { 左,左 } 结点5的位置: { 左,右 } 结点6的位置: { 右,左 } 结点7的位置: { 右,右 } 结点8的位置: { 左,左,左 } 结点9的位置: